SQL4 択難易度 標準

合計給与が 600 以上の部署だけを出したい。正しいのは?

SELECT dept, SUM(salary) AS total FROM empWHERE SUM(salary) >= 600GROUP BY dept ORDER BY dept;

正答

  1. SELECT dept, SUM(salary) AS total FROM emp HAVING SUM(salary) >= 600 GROUP BY dept ORDER BY dept;
  2. SELECT dept, SUM(salary) AS total FROM emp WHERE salary >= 600 GROUP BY dept ORDER BY dept;
  3. SELECT dept, SUM(salary) AS total FROM emp GROUP BY dept HAVING SUM(salary) >= 600 ORDER BY dept;
  4. SELECT dept, SUM(salary) AS total FROM emp GROUP BY dept WHERE SUM(salary) >= 600 ORDER BY dept;

解説

WHERE はグループ化の前に 1 行ずつ評価されるので、SUM のような集計関数は使えず、SQLite は集計関数の誤用としてエラーを返す。集計後の値で絞るには GROUP BY の直後に HAVING を書く。HAVING を GROUP BY より前に置く形は構文エラーになる。WHERE salary >= 600 は「1 人の給与が 600 以上」の意味になり、合計の条件とは別物で、この表では 0 件になる。

参考: www.sqlite.org

havingwhereaggregate

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

SQLクイズへ