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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る