SQL4 択難易度 標準

2 人以上いる部署だけを出したい。正しく直したものは?

SELECT dept, COUNT(*) AS n FROM empWHERE COUNT(*) >= 2 GROUP BY dept ORDER BY dept;

正答

  1. SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept HAVING COUNT(*) >= 2 ORDER BY dept;
  2. SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept WHERE COUNT(*) >= 2 ORDER BY dept;
  3. SELECT dept, COUNT(*) AS n FROM emp HAVING COUNT(*) >= 2 GROUP BY dept ORDER BY dept;
  4. 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

havinggroup-bywhere

この問題を含む SQL のテストを制限時間つきで解く

SQLクイズへ