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問付き! (スッキリシリーズ)

スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)