SC Workbook
科目 A-1 · 技術要素(セキュリティ以外)

GROUP BY と HAVING

表「受注」に対して次の SQL 文を実行したとき,結果として得られる顧客コードをすべて挙げたものはどれか。

受注(受注番号,顧客コード,金額)
1,C1,500
2,C2,1200
3,C3,300
4,C1,600
5,C3,400
6,C2,200
7,C3,800
8,C4,900
SELECT 顧客コード FROM 受注
  WHERE 金額 >= 500
  GROUP BY 顧客コード
  HAVING SUM(金額) >= 1000
  1. アC2
  2. イC1,C2
  3. ウC1,C2,C3
  4. エC1,C2,C3,C4
正解と解説を見る

正解 イ

この問題の基礎知識

  • SELECT 文は,FROM で表を指定し,WHERE で行を絞り込み,GROUP BY でグループ化し,HAVING でグループを絞り込み,SELECT で列を取り出すという順に評価すると考える。
  • WHERE 句はグループ化の前に個々の行に条件を適用し,HAVING 句はグループ化の後にグループごとの集計値に条件を適用する。
  • 集計関数として,SUM はグループ内の値の合計,COUNT は行数,AVG は平均,MAX と MIN は最大値と最小値を求める。
アC2

HAVING の条件を個々の行の金額に適用し,金額が 1000 以上の行をもつ C2 だけとした誤りである。HAVING はグループ化した後の集計値に対して適用される。

イC1,C2正解

WHERE で金額が 500 以上の行(受注番号 1,2,4,7,8)に絞り込んでから顧客ごとに合計すると,C1 が 1100,C2 が 1200,C3 が 800,C4 が 900 となり,1000 以上は C1 と C2 である。

ウC1,C2,C3

WHERE 句を無視して全行で合計した結果である。その場合 C3 は 300+400+800=1500 となるが,WHERE はグループ化の前に適用されるので,C3 の合計は 800 となり条件を満たさない。

エC1,C2,C3,C4

HAVING 句を無視し,WHERE で残った行の顧客コードをすべて挙げた結果である。HAVING により合計金額が 1000 未満の C3(800)と C4(900)は除外される。

検証用の出典レビュー済み
JIS X 3005-2 データベース言語 SQL 第 2 部:基本機能(SQL/Foundation)問題 ID A1-TEC-0505 · AI 作成のオリジナル問題 · 出典の原文は参照できませんが、複数の独立したレビューで正解と解説を確認しています。 照合日 2026-11-07

非公式の学習用アプリです(IPA とは関係ありません)。問題はすべて AI が作成したオリジナルで、誤りを含む場合があります。