SQLSERVER SUMの使い方GROUP

SQLSERVER SUMの使い方GROUP

/*
 生徒単位で教科が複数存在する
student_id	subject	score
A001	英語	100
A001	国語	58
A001	数学	90
B002	英語	77
B002	国語	60
C003	英語	52
C003	国語	49
C003	社会	100
*/

--SUMを使用するときにGROUP BY が必要なときと
--不要なときがあってよく理解できない時があった
--GROUP BYが必要なのはどのまとまりで合計が必要かを
--考えること。それがわかると理解しやすい。
--ただ、GROUPで出力するときにSELECTできるものはGROUPに限られる
--どのまとまりで合計にするかがポイント

SELECT * FROM ScoreRows
--全体の合計を出す
SELECT SUM(SCORE) AS GOUKEI FROM ScoreRows--586--全体なのでGROUP は不要

--教科ごとに合計点を出す GROUP BY subject が必要
SELECT subject,SUM(score) AS GOUKEI FROM ScoreRows
GROUP by subject

--生徒ごとに合計点を出す
SELECT student_id,SUM(score) AS GOUKEI FROM ScoreRows--GROUP BY が必要
GROUP by student_id

そして、もし50点以上の教科があればその生徒を出力したいときはサブクエリを使うとよい
使い方の例は 以下の感じでサブクエリで一旦処理をさせてそこから抽出されたstudent_idを更に出力させる
SELECT * FROM ScoreRows
student_id in (
SELECT student_id FROM ScoreRows having subject >= 50(試していないのでえらーにになるかも)
)

こちらの記事もどうぞ