標準 SQL でエラーになる。このSQLへの指摘として正しいものは?
SELECT dept, name, COUNT(*) AS nFROM empGROUP BY deptORDER BY n DESC;正答
- name が GROUP BY にも集計関数にも入っていないので、部署ごとにどの name を出すか決まりません。
- ORDER BY では SELECT の別名 n を使えないので、ORDER BY COUNT(*) DESC と書く必要があります。
- COUNT(*) は GROUP BY と一緒に使えないので、COUNT(dept) にする必要があります。
- GROUP BY は ORDER BY の後ろに書かないと、並べ替える前に集計されてしまいます。
解説
GROUP BY dept で部署ごとに 1 行にまとめると、同じ部署に複数いる name はどれを出すか決められない。標準 SQL ではグループ化していない列を SELECT に書くとエラーになる。name を消すか GROUP BY dept, name にする。ORDER BY は SELECT より後に評価されるので別名 n を使ってよく、その指摘は誤り。SQLite は通してしまうが、どの行の name が返るかは保証されない。
この問題を含む SQL のテストを制限時間つきで解く
SQLクイズへ