HAVINGの使い方 【SQL入門】
HAVINGとは?
GROUP BY
句によって集計された結果に対して
条件を指定することが可能です。
記述方法
SELECT col, count(*) as cnt FROM table GROUP BY col HAVING count(*) > 50
記述方法はこの通り、GROUP BY
のあとにHAVING
を記載します。
そして、SELECT
の部分でも記載している集計(COUNT(*)
)をHAVING
の部分でも記入します。
今回の例ではGROUP BY
してカウントされた値(col
)が
50以上(HAVING count(*) > 50
)のデータを抽出しております。
WHERE句とHAVING句の違いは?
データに対して条件指定することは、where句でも可能です。
それでは、HAVING句はどのように異なるのでしょうか。
WHEREは、レコード(行)に対しての条件を指定しておりました。
そのため、グループ化された値(GROPU BY
の結果)に対しては、
WHEREを用いて条件を指定することができません。
※サブクエリを作成すれば可能ですが、直接的に条件指定はしていません。
HAVINGの実践
ここからは、具体的なテーブルに対してHAVINGを用いて処理を行ってみましょう。
家計簿
費目 | 金額 |
---|---|
交際費 | 5000 |
食費 | 1000 |
食費 | 3000 |
移動費 | 500 |
光熱費 | 3000 |
移動費 | 300 |
費目ごとの金額を算出してみましょう。
SELECT 費目, SUM(金額) as 合計額 FROM table GROUP BY 費目
実行結果
費目 | 合計額 |
---|---|
交際費 | 5000 |
食費 | 4000 |
移動費 | 800 |
光熱費 | 3000 |
これは単純に費目ごとに合計金額を算出したに過ぎませんね。
さて、ここからHAVINGを実際に使ってみましょう。
費目ごとの合計金額を算出し、なおかつ合計額が3000円以上の費目。
SELECT 費目, SUM(金額) as 合計額 FROM table GROUP BY 費目 HAVNG SUM(金額) > 3000
実行結果
費目 | 合計額 |
---|---|
交際費 | 5000 |
食費 | 4000 |
このようになりました。
GROUP BY
で計算された結果に対して条件を指定して、
レコードを返してくれました。
参考文献
入門者の方に非常におすすめの本になります。
わかりやすい解説から、練習問題までたくさん用意されているので、
SQLの習得に有用ではないかと思います。
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る