【SQL】HAVINGの使い方をわかりやすく解説する!

Web技術
スポンサーリンク

HAVINGってどんなときに使うの?

WHEREとHAVINGの違いは何?

わかりやすく教えて欲しい!

こういった疑問にこたえます。

この記事を読めば
  • HAVINGの使い方がわかるようになる
  • WHEREとの違いがわかるようになる

エンジニアの僕がわかりやすく解説します!

HAVINGの使い方

HAVINGはCOUNT関数などを使ってテーブルのデータを集約した場合に、その結果に対する条件を指定するときに使います。

HAVING句の構文は次の通りです。

SELECT <列名1>, <列名2>,・・・ 
    FROM <テーブル名>
  GROUP BY <列名1>, <列名2>,・・・
HAVING <グループの値に対する条件>

WHERE句では行に対する条件を指定するのに対して、HAVING句はグループに対する条件指定を書きます。

例えば、次のようなshohinテーブルがあったとします。

shohin_meishohin_bunruikakaku
鉛筆事務用品100
ボールペン事務用品100
フライパンキッチン用品1000
キッチン用品1500
帽子衣類1500
Tシャツ衣類1000
靴下衣類300
消しゴム事務用品50
shohinテーブル

商品分類で集約したグループに対して、含まれる行が3行以上という条件を指定するとするとSQLは次のようになります。

SELECT shohin_bunrui, COUNT(*)
    FROM shohin
  GROUP BY shohin_bunrui
HAVING COUNT(*) >= 3;

実行結果

 shohin_bunrui | count 
---------------+-------
 衣類          |     3
 事務用品      |     3

図で表すとこんなイメージ。今回の例ではHAVING句で選択の条件を行数が3以上としました。

HAVINGの使い方

HAVING句に書ける要素

HAVING句に書くことのできる要素は次の3つです。

  • 定数
  • 集約関数
  • GROUP BY句で指定した列名(集約キー)

先ほどの例では、COUNTという集約関数と3という定数を使いました。

集約キーであるshohin_bunruiを指定して特定の分類だけ取り出すことも可能です。

HAVINGの使い方まとめ

解説の内容をまとめます。

  • HAVINGはデータを集約した場合にその結果に対する条件を指定するときに使う
  • WHERE句は行に対する条件を指定するのに対して、HAVING句はグループに対する条件を指定する
  • HAVING句に書ける要素は定数、集約関数、集約キーの3つ

以上、お疲れ様でした。

コメント

タイトルとURLをコピーしました