データベース
次のSQL文の実行結果として、正しいものはどれか。 SELECT 部署名, AVG(給与) AS 平均給与 FROM 社員 WHERE 給与 >= 300000 GROUP BY 部署名 HAVING AVG(給与) >= 400000 ORDER BY 平均給与 DESC;
ア.全社員の平均給与が400,000円以上の部署のみを昇順に表示する。
イ.給与が300,000円以上の社員を対象に、部署ごとの平均給与を集計し、その平均が400,000円以上の部署を平均給与の降順で表示する。正解
ウ.給与が400,000円以上の部署名と平均給与を降順で表示する。
エ.全社員を対象に部署ごとの平均給与を集計し、400,000円以上の部署を降順で表示する。
解説
SQLのWHEREは「集計前のフィルター」、HAVINGは「集計後のフィルター」。料理で言えば、WHEREは食材の下ごしらえで傷んだ食材を取り除き、HAVINGは完成した料理の中から合格品だけを選ぶ検品です。
なぜ イ が正解か
SQL実行順序:①FROM(社員テーブルから)→②WHERE(給与≥30万の社員に絞る)→③GROUP BY(部署名でグループ化)→④集計関数(平均給与を計算)→⑤HAVING(平均≥40万の部署に絞る)→⑥SELECT(部署名と平均給与を選択)→⑦ORDER BY(平均給与の降順でソート)。WHEREで先に30万未満を除外してから集計し、さらにHAVINGで集計後の結果を絞り込んでいます。
出典: AI生成問題(学習用)