SQL記述難易度 標準

HAVING の位置が誤っている。正しく直して書いてください。

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

正答

正答SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept HAVING n >= 2;

次も正解: SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept HAVING COUNT(*) >= 2;(空白の有無・大文字小文字・末尾のセミコロンは問いません)

解説

HAVING はグループ化した後の集計結果を絞る句なので、GROUP BY dept の後ろに書く。HAVING を GROUP BY より前に置くと、SQLite は GROUP BY の位置で構文エラーを返す。SQLite では HAVING の中で SELECT の別名 n を参照できるので HAVING n >= 2 のままでよく、HAVING COUNT(*) >= 2 と書き直しても同じ結果になる。WHERE n >= 2 にすると集計前の行に条件を付けることになり誤り。

参考: www.sqlite.org

havinggroup-byclause-order

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

SQLクイズへ