【sql:練習題14】查詢各科成績最高分、最低分和平均分


題目:查詢各科成績最高分、最低分和平均分:

以如下形式顯示:課程 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 表拿到課程名稱呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM