HAVINGってどんなときに使うの?
WHEREとHAVINGの違いは何?
わかりやすく教えて欲しい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します!
HAVINGの使い方
HAVINGはCOUNT関数などを使ってテーブルのデータを集約した場合に、その結果に対する条件を指定するときに使います。
HAVING句の構文は次の通りです。
SELECT <列名1>, <列名2>,・・・
FROM <テーブル名>
GROUP BY <列名1>, <列名2>,・・・
HAVING <グループの値に対する条件>
WHERE句では行に対する条件を指定するのに対して、HAVING句はグループに対する条件指定を書きます。
例えば、次のようなshohinテーブルがあったとします。
shohin_mei | shohin_bunrui | kakaku |
鉛筆 | 事務用品 | 100 |
ボールペン | 事務用品 | 100 |
フライパン | キッチン用品 | 1000 |
鍋 | キッチン用品 | 1500 |
帽子 | 衣類 | 1500 |
Tシャツ | 衣類 | 1000 |
靴下 | 衣類 | 300 |
消しゴム | 事務用品 | 50 |
商品分類で集約したグループに対して、含まれる行が3行以上という条件を指定するとするとSQLは次のようになります。
SELECT shohin_bunrui, COUNT(*)
FROM shohin
GROUP BY shohin_bunrui
HAVING COUNT(*) >= 3;
実行結果
shohin_bunrui | count
---------------+-------
衣類 | 3
事務用品 | 3
図で表すとこんなイメージ。今回の例ではHAVING句で選択の条件を行数が3以上としました。
HAVING句に書ける要素
HAVING句に書くことのできる要素は次の3つです。
- 定数
- 集約関数
- GROUP BY句で指定した列名(集約キー)
先ほどの例では、COUNTという集約関数と3という定数を使いました。
集約キーであるshohin_bunruiを指定して特定の分類だけ取り出すことも可能です。
HAVINGの使い方まとめ
解説の内容をまとめます。
- HAVINGはデータを集約した場合にその結果に対する条件を指定するときに使う
- WHERE句は行に対する条件を指定するのに対して、HAVING句はグループに対する条件を指定する
- HAVING句に書ける要素は定数、集約関数、集約キーの3つ
以上、お疲れ様でした。
コメント