WHERE句は行を絞り込む処理であることを明確にする。GROUP BY句は、指定した列の値に基づいて行をグループ化する処理であることを明確にする。SUM(), AVG()などの集計関数は、指定した列に対して計算を行う処理であることを明確にする。scoreという列の平均」のように、行と列の両方を指定して説明する。申し訳ありません。私の表現が混乱を招いてしまいました。
AVG()やSUM()といった集計関数は、常に列に対して計算を行います。
GROUP BY句は、集計の前に行をグループ化する役割を担います。
もう一度、学校の成績表の例を使って整理します。
| name | class | subject | score |
|---|---|---|---|
| Taro | 1-A | Math | 85 |
| Hanako | 1-A | Math | 92 |
| Jiro | 1-B | Math | 78 |
name、class、subject、scoreといった、縦の項目です。Taroの成績、Hanakoの成績といった、横の一つのデータのまとまりです。WHERE句とAVG()の関係あなたが指摘した「subjectがMathの行を絞り込む」という部分が、AVG()関数が「行」に対して計算を行うように感じさせてしまったかもしれません。
これは、WHERE句の役割です。
WHERE subject = 'Math'は、テーブルの中からsubject列の値がMathである行をすべて選び出します。この時点で、JiroやYumiのEnglishの行は除外されます。