最終更新日:2026年7月15日
fe fe-technology database
まず結論
GROUP BY は、どの単位でデータをまとめるかを指定する句です。
ORDER BY は、集計や検索の結果をどの順番で表示するかを指定する句です。
基本情報技術者試験では、次のように切り分けます。
○○ごとに平均や合計を求める
→ GROUP BY
○○の昇順・降順に表示する
→ ORDER BY
例えば、クラスごと・教科ごとの平均点を求め、クラス名と教科名の昇順で表示するなら、次のように書きます。
SELECT クラス名, 教科名, AVG(点数) AS 平均点
FROM 中間テスト
GROUP BY クラス名, 教科名
ORDER BY クラス名, 教科名;
直感的な説明
GROUP BY と ORDER BY は、似た位置に書かれますが、役割は異なります。
GROUP BY
→ 同じものをまとめる
ORDER BY
→ 結果を並べ替える
例えば、テスト結果が次のように並んでいるとします。
| クラス名 | 教科名 | 学生番号 | 点数 |
|---|---|---|---|
| 11 | 数学 | 100001 | 80 |
| 11 | 数学 | 100002 | 70 |
| 11 | 英語 | 100001 | 60 |
| 12 | 数学 | 100003 | 90 |
クラス名と教科名でグループ化すると、次の単位で集計されます。
11・数学
11・英語
12・数学
その後に ORDER BY クラス名, 教科名 と書くと、クラス名を優先し、同じクラス内では教科名の順に表示されます。
定義・仕組み
GROUP BY
GROUP BY は、指定した列の値が同じ行をまとめます。
例えば、次のSQLです。
SELECT クラス名, 教科名, AVG(点数) AS 平均点
FROM 中間テスト
GROUP BY クラス名, 教科名;
この場合、集計単位は次の組合せです。
クラス名 × 教科名
つまり、クラスだけでも、教科だけでもなく、クラスと教科の組合せごとに平均点を求めます。
ORDER BY
ORDER BY は、結果を指定した列の順に並べます。
ORDER BY クラス名, 教科名
と書いた場合は、まずクラス名で並べ、同じクラス名の中では教科名で並べます。
昇順は ASC、降順は DESC です。
ORDER BY クラス名 ASC, 教科名 ASC
ASC は省略できます。
集約関数
GROUP BY は、集約関数と組み合わせて使われることが多いです。
| 関数 | 意味 |
|---|---|
AVG() |
平均 |
SUM() |
合計 |
COUNT() |
件数 |
MAX() |
最大値 |
MIN() |
最小値 |
例えば、教科ごとの平均点なら次のように書きます。
SELECT 教科名, AVG(点数)
FROM 中間テスト
GROUP BY 教科名;
科目Aでどう出る?
科目Aでは、SQL文の空欄補充や、正しい句の組合せを選ぶ問題として出やすいです。
まず、問題文の表現を分解します。
平均・合計・件数を求める
→ 集約関数
○○ごとに求める
→ GROUP BY
○○順に表示する
→ ORDER BY
例えば、
クラスごと、教科ごとの平均点を求める
なら、集計単位は次の2列です。
GROUP BY クラス名, 教科名
さらに、
クラス名、教科名の昇順に表示する
なら、次のようにします。
ORDER BY クラス名, 教科名
SELECT句との対応
集約関数と一緒に通常の列を SELECT する場合、その列は基本的に GROUP BY に指定します。
SELECT クラス名, 教科名, AVG(点数)
なら、通常列は クラス名 と 教科名 です。
したがって、
GROUP BY クラス名, 教科名
と対応させます。
GROUP BYへ余計な列を入れない
例えば、次のように学生番号まで指定すると、集計単位が細かくなりすぎます。
GROUP BY クラス名, 教科名, 学生番号
この場合は、クラス・教科ごとではなく、クラス・教科・学生ごとの集計になります。
集計単位に必要な列だけをGROUP BYへ入れる
ことが大切です。
どんな場面で使う?
GROUP BY は、データを分類して集計するときに使います。
例えば、次のような場面です。
部署ごとの売上合計
商品ごとの販売件数
月ごとの平均気温
クラスごとの平均点
ORDER BY は、その結果を見やすい順に並べるときに使います。
売上の高い順
日付の古い順
クラス名の昇順
平均点の降順
つまり、実務では次の流れで一緒に使うことがあります。
データをまとめる
→ GROUP BY
結果を見やすく並べる
→ ORDER BY
よくある誤解・混同
GROUP BYとORDER BYを同じものだと思う
誤りです。
| 句 | 役割 |
|---|---|
GROUP BY |
集計単位を決める |
ORDER BY |
表示順を決める |
ORDER BYの列を集計単位と考える
ORDER BY は結果を並べるだけです。
ORDER BY クラス名, 平均点
と書いても、集計単位が変わるわけではありません。
AVGの別名をGROUP BYに使う
次のような書き方は、集計結果をグループ化の基準にしようとしているため不適切です。
GROUP BY クラス名, 平均点
集計前の行をどの単位でまとめるかを指定する必要があります。
SELECTにある通常列をGROUP BYへ入れ忘れる
例えば、次のSQLでは 教科名 が SELECT にあるのに、GROUP BY にありません。
SELECT クラス名, 教科名, AVG(点数)
FROM 中間テスト
GROUP BY クラス名;
標準的なSQLでは不適切です。
昇順と降順を逆にする
ASC
→ 昇順
DESC
→ 降順
ASC は省略できますが、DESC は明示する必要があります。
まとめ(試験直前用)
GROUP BYは、集計する単位を決めるORDER BYは、結果の表示順を決める- 「○○ごとに平均」は
GROUP BY - 「○○の昇順・降順」は
ORDER BY AVG、SUM、COUNTなどは集約関数SELECTにある通常列は、基本的にGROUP BYに指定する- GROUP BYへ余計な列を入れると、集計単位が細かくなりすぎる
ASCは昇順で省略可能、DESCは降順