部署ごとの人数を出したい。正しく直したものは?
SELECT dept, COUNT(*) AS n FROM emp ORDER BY dept;正答
- SELECT dept, COUNT(*) AS n FROM emp GROUP BY dept ORDER BY dept;
- SELECT DISTINCT dept, COUNT(*) AS n FROM emp ORDER BY dept;
- SELECT dept, COUNT(*) AS n FROM emp ORDER BY dept GROUP BY dept;
- SELECT dept, COUNT(dept) AS n FROM emp WHERE dept IS NOT NULL ORDER BY dept;
解説
COUNT(*) を GROUP BY 無しで使うと表全体が 1 グループになり、全体の件数 1 行しか返らない。部署ごとに数えるには GROUP BY dept で部署単位にまとめる。選択肢 2 は DISTINCT を付けても集計のグループは分かれず 1 行のまま。選択肢 3 は GROUP BY を ORDER BY の後ろに書いており構文エラー。選択肢 4 は NULL を除くだけで全体の 1 行しか返らない。
参考: www.sqlite.org
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ