メインコンテンツへ
データベース

注文テーブルから「3件以上注文した顧客ID」を取得するSQL文として正しいものはどれか。(テーブル名: 注文, 列名: 顧客ID, 注文ID)

ア.SELECT 顧客ID FROM 注文 WHERE COUNT(注文ID) >= 3 GROUP BY 顧客ID
イ.SELECT 顧客ID FROM 注文 GROUP BY 顧客ID WHERE COUNT(*) >= 3
ウ.SELECT 顧客ID FROM 注文 GROUP BY 顧客ID HAVING COUNT(注文ID) > 3
エ.SELECT 顧客ID FROM 注文 GROUP BY 顧客ID HAVING COUNT(*) >= 3正解

解説

HAVINGは「グループに対するWHERE」。グループ化した後の集計結果に条件をかけるにはHAVINGを使う。

なぜ エ が正解か

GROUP BY 顧客ID でグループ化し、HAVING COUNT(*) >= 3 でそのグループの件数が3以上の顧客を絞り込む。COUNT(*)はNULLを含むすべての行を数えるので適切。

なぜ ア は間違いか

WHERE COUNT(注文ID) >= 3 は誤り。WHEREの中で集計関数(COUNT)は使えない。

なぜ イ は間違いか

GROUP BY の後にWHEREを置くのは文法エラー。正しい順序はWHERE→GROUP BY→HAVINGの順。

なぜ ウ は間違いか

HAVING COUNT(注文ID) > 3 は「3件より多い」(4件以上)であり、「3件以上」(>=3)と異なる。

出典: AI生成問題(学習用)