mysql查詢每一個學生的各科成績,以及總分和平均分

今天看一個mysql教程,看到一個例子,感受裏面的解決方案不是很合理。
問題以下:
有學生表:
在這裏插入圖片描述
成績表:
在這裏插入圖片描述
想要查詢出的效果:
在這裏插入圖片描述mysql

其實就是原來是一個分數一條記錄,如今變成一個學生一條記錄。
那個教程裏的sql以下:sql

select a.id as 學號, a.name as 姓名, 
(case when b.kemu='語文' then score else 0 end) as 語文,
(case when b.kemu='數學' then score else 0 end) as 數學,
(case when b.kemu='英語' then score else 0 end) as 英語
from student a, grade b
where a.id = b.id

實現的效果:
在這裏插入圖片描述
很明顯,每一個學生的每一個成績都是單獨一條記錄,那和原來沒有什麼區別嘛。
改進後的sql以下:函數

SELECT s.id, s.name, 
max(case when g.kemu='語文' then score else 0 end) as 語文,
max(case when g.kemu='數學' then score else 0 end) as 數學,
max(case when g.kemu='英語' then score else 0 end) as 英語,
sum(score) as 總分,
avg(score) as 平均分
from student s LEFT JOIN grade g ON  s.id = g.s_id GROUP BY s.id

就是使用了聚合函數,效果以下:
在這裏插入圖片描述
是否是比原來的效果好不少了呢spa

相關文章
相關標籤/搜索