HAVING の使い方
集計した結果で絞る
書き方
… GROUP BY 列 HAVING 集計の条件
WHERE は集計の前に行を絞り、HAVING は集計の後にグループを絞ります。
よく使うオプション
| オプション | 意味 |
|---|---|
HAVING 集計の条件 | まとめた後のグループを絞る |
WHERE 条件 | まとめる前に行を絞る(HAVING と一緒に使える) |
例
SELECT dept_id, COUNT(*) FROM employees GROUP BY dept_id HAVING COUNT(*) >= 10; dept_id | count
---------+-------
1 | 10
2 | 12
(2 rows)社員が 10 人以上いる部署だけを出します。
SELECT customer_id, SUM(total) FROM orders WHERE status = 'paid' GROUP BY customer_id HAVING SUM(total) > 50000;
支払い済みの注文だけで客ごとに合計し、5 万円を超える客を出します。WHERE で行を絞り、HAVING でグループを絞っています。
SELECT city FROM customers GROUP BY city HAVING COUNT(*) = 1;
客が 1 人しかいない町を出します。
よくある間違い・注意
- WHERE に COUNT(*) などの集計は書けません。集計した値で絞るのは HAVING です。
- 集計しない列の条件は、HAVING より WHERE に書くほうが、まとめる行が減って速くなります。
実際に打って練習する
SQL コースの Lv22「まとめた後で絞る HAVING」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。