2 人以上いる部署だけを出したい。正しく直したものは?
SELECT dept, COUNT(*) AS n FROM empWHERE COUNT(*) >= 2 GROUP BY dept ORDER BY dept;正答
- SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept HAVING COUNT(*) >= 2 ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept WHERE COUNT(*) >= 2 ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp HAVING COUNT(*) >= 2 GROUP BY dept ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept HAVING n > 2 ORDER BY dept;
解説
WHERE は GROUP BY より前に行単位で評価されるため、まだ存在しない集計値 COUNT(*) を条件にできずエラーになる。グループごとの集計結果で絞るには GROUP BY の後ろに HAVING を書く。選択肢 2 は WHERE を GROUP BY の後ろに移しただけで構文エラー、選択肢 4 は HAVING の位置は正しいが n > 2 では 2 人の部署が除かれてしまう。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ