題目:查詢各科成績最高分、最低分和平均分:
以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率
及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
分析: 是按照各科查成績 因此 是按照 courseid group by
我之前還不知道可以用 MAX(score) AS '最高分', MIN(score)AS '最低分' 這種寫法
及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90 這種分段的 要引用一組關鍵字
case when then else end
於是sql 就寫成這樣:
SELECT courseid,MAX(score) AS '最高分', MIN(score)AS '最低分' ,AVG(score) AS '平均分' ,COUNT(*) AS '選修人數',
SUM(CASE WHEN student_score.score >= 60 THEN 1 ELSE 0 END)/COUNT(*) AS '及格率',
SUM(CASE WHEN student_score.score >= 70 AND student_score.score< 80 THEN 1 ELSE 0 END)/COUNT(*) AS '中等率',
SUM(CASE WHEN student_score.score >= 80 AND student_score.score<90 THEN 1 ELSE 0 END)/COUNT(*) AS '優良率',
SUM(CASE WHEN student_score.score >= 90 THEN 1 ELSE 0 END)/COUNT(*) AS '優秀率'
FROM student_score GROUP BY courseid ORDER BY COUNT(*)DESC,student_score.courseid ASC ;
運行:

優化:這里怎么再去關聯student_course 表拿到課程名稱呢?
