次のsales表に対してSQLを実行する。結果に含まれるshopはどれか。amountにNULLはない。 shop | amount A | 400 A | 700 B | 900 B | 50 C | 1200 SELECT shop, SUM(amount) FROM sales GROUP BY shop HAVING SUM(amount) >= 1000;
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:エ AとC
この表示だけでは、回答数や正答率は変わりません。
解説
GROUP BY shopで店舗ごとにまとめると、Aは400 + 700 = 1100、Bは900 + 50 = 950、Cは1200です。HAVINGは集約後のグループに条件を適用するので、合計が1000以上のAとCが残ります。
Aだけでなく、合計1200のCも条件を満たします。
Bの合計は950なので条件を満たしません。Aの合計1100は条件を満たします。
Bは合計が1000未満なので除外されます。
Aは1100、Cは1200で、どちらも1000以上です。
関連知識
WHEREは集約前の行を絞り込み、HAVINGは集約後のグループを絞り込みます。例えばWHERE amount >= 1000を使うと、この例ではCの行しか集約対象にならず、別の処理になります。
間違えやすいポイント
各行のamountを1000と比較するのではなく、店舗ごとのSUM(amount)を比較します。
覚え方
WHEREは行、HAVINGは集計したグループ。
実務での意味
月間売上が基準額を超えた店舗や、一定件数以上の注文がある顧客を抽出するときに使います。
解説:本サイト編集部によるオリジナル文章