SQL4 択難易度 標準

標準 SQL でエラーになる。このSQLへの指摘として正しいものは?

SELECT dept, name, COUNT(*) AS nFROM empGROUP BY deptORDER BY n DESC;

正答

  1. name が GROUP BY にも集計関数にも入っていないので、部署ごとにどの name を出すか決まりません。
  2. ORDER BY では SELECT の別名 n を使えないので、ORDER BY COUNT(*) DESC と書く必要があります。
  3. COUNT(*) は GROUP BY と一緒に使えないので、COUNT(dept) にする必要があります。
  4. GROUP BY は ORDER BY の後ろに書かないと、並べ替える前に集計されてしまいます。

解説

GROUP BY dept で部署ごとに 1 行にまとめると、同じ部署に複数いる name はどれを出すか決められない。標準 SQL ではグループ化していない列を SELECT に書くとエラーになる。name を消すか GROUP BY dept, name にする。ORDER BY は SELECT より後に評価されるので別名 n を使ってよく、その指摘は誤り。SQLite は通してしまうが、どの行の name が返るかは保証されない。

参考: www.postgresql.org

group-by

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

SQLクイズへ