給与 200 以上の行だけを部署ごとに数えたい。正しいのは?
SELECT dept, COUNT(*) AS n FROM empGROUP BY dept WHERE salary >= 200ORDER BY dept;正答
- SELECT dept, COUNT(*) AS n WHERE salary >= 200 FROM emp GROUP BY dept ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp WHERE salary >= 200 GROUP BY dept ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept ORDER BY dept WHERE salary >= 200;
- SELECT dept, COUNT(*) AS n FROM emp WHERE salary >= 200 ORDER BY dept GROUP BY dept;
解説
WHERE はグループ化の前に個々の行を絞る句なので、GROUP BY より前に書く。書く順番は FROM → WHERE → GROUP BY → ORDER BY で、評価の順番も同じく WHERE が先、GROUP BY が後になる。GROUP BY の後ろに WHERE を書くと SQLite は構文エラーを返す。ORDER BY を GROUP BY より前に置く形も誤りで、並べ替えはグループ化した後の結果に対して行うため最後のほうに書く。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ