SQLSERVER SUMの使い方GROUP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* 生徒単位で教科が複数存在する 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(試していないのでえらーにになるかも)
)