【SQL超入門講座】07.HAVING|グループ化したデータの中からデータ抽出

オススメ

前回のレッスンでは、グルーピングをするGROUP BYについて説明しました。
つまり、そのレッスンで、SELECT文にGROUP BYを付けることでデータをグルーピングできるとお伝えしました。
今回のこのレッスンで紹介するのは、HAVINGです。
HAVINGは、グルーピングされたデータの中から、さらも特定の条件でデータ抽出したいときに使います。
ここまで聞いて、あれ?と思われた方がいらっしゃるかもしれません。
レッスン04で解説したWHEREも、特定の条件で抽出するものです。
HAVINGとWHEREの違いは、WHEREが単純にテーブル内のデータを抽出するのに対し、HAVINGはグルーピングしたデータからさらに抽出条件を付けられるという点が異なります。
これだけだとわかりにくいと思うので、レッスンの中で比較しながら解説をしていきます。

▼目次
00:00 はじめに
01:14 HAVINGとは?
03:09 HAVINGとWHEREの違い
04:54 WHEREとHAVINGの併用
05:53 おわりに

▼関連動画
【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】01.コース紹介 ~ SQLとは? ~ 環境構築|初心者向け

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】02.データベースのテーブルとは?

【SQL超入門講座】03.SELECT文|SQLの基本中の基本

【SQL超入門講座】03.SELECT文|SQLの基本中の基本

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】04.WHERE|特定の条件でデータを抽出する方法

【SQL超入門講座】05.ORDER BY|データの並び替え

【SQL超入門講座】05.ORDER BY|データの並び替え

【SQL超入門講座】06.GROUP BY|グルーピング、グループ化

【SQL超入門講座】06.GROUP BY|グルーピング、グループ化

Pythonの便利ライブラリ「Pandas入門講座」合併版|Pandasの基本的なこと3時間で学べます【Python超入門コースの次におすすめの入門講座】

Pythonの便利ライブラリ「Pandas入門講座」合併版|Pandasの基本的なこと3時間で学べます【Python超入門コースの次におすすめの入門講座】

▼書き起こし
HAVINGは、グルーピングされたデータの中から、さらに特定の条件でデータ抽出したいときに使います。
「グルーピングされたデータの中から」というのがポイントです。
覚えておいてくださいね。
それでは、使い方を見ていきましょう。

“`SQL
SELECT グルーピングをするカラム、集計関数(集計対象カラム)  
FROM テーブル名
WHERE 条件式
GROUP BY グルーピングをするカラム
HAVING 集計関数(集計対象カラム)で条件式
ORDER BY ソート条件
“`

HAVINGの構文はこちらです。
HAVINGはGROUP BYとORDER BYの間に記述します。
また、HAVINGには、集計関数(集計対象カラム)で、条件式を記述する必要があります。
ちょっと難しくなってきたので、HAVINGの具体例を見る前に、GROUP BYのおさらいをしましょう。

![s_01](img/s_01.png)

次のSQLを実行します。

“`SQL
SELECT
商品名
, sum(売上金額)
FROM test_table
GROUP BY 商品名
“`

商品名を起点に売上金額の合計を算出します。
実行します。
ここまでが前回のお話です。
今回はもう一歩進んで「売上金額が100万円以上の商品名のみ抽出」してみましょう。
どうSQLで記述するかみていきましょう。

“`SQL
SELECT
商品名
, sum(売上金額)
FROM test_table
GROUP BY 商品名
HAVING sum(売上金額) >= 1000000
“`
このSQLを実行すると、売上金額が100万円以上の商品名のみ抽出することができます。
HAVINGに集約関数を含んだカラムを直接条件式に入れ込むことで、HAVINGを元にしたデータ抽出できます。
100万円以上の商品名のみ抽出することができました。

ここまで解説を聞いて、「結局WHEREとHAVINGって何が違うんだ?」と感じた方もいらっしゃると思います。
WHEREとHAVINGの整理をします。
WHEREもHAVINGもやっていることは同じで、どちらもデータに対して抽出処理を実行します。
異なるのは呼ばれるタイミングのみです。
実はデータベースがSQLの各コマンドを解釈するのは、単純に上から下へ1行ずつ見ていくのではなく、ちゃんと順番があります。
SQLの呼ばれる順番は次の通りです。

![s_04](img/s_04.png)

この図から分かる通り、SQLはSELECTではなくFROMから呼ばれ、WHERE、GROUP BY、HAVING、その後にSELECTが呼ばれる、という流れになっています。
なので、WHEREはGROUP BYよりも前に、HAVINGはGROUP BYのあとに呼ばれています。
これは言い換えると「WHEREはGROUP BYされる前のデータに抽出条件を付与する」
そして、「HAVINGはGROUP BYされた後のデータに抽出条件を付与する」という流れです、
SQLが呼ばれる順を復習すると、「どのテーブルの、どのデータを、どうグルーピングし、グルーピングしたデータをどう抽出し、どのカラムを表示するか」という流れになります。
試しにWHEREに集約関数を含んだカラムを指定したらどうなるか見てみましょう。
(続く)

▼書き起こしブログ
(準備中)

▼自己紹介
ブログに自己紹介を書いております。

▼SNS
Twitter : https://twitter.com/kino_code/likes​
Facebook : https://www.facebook.com/%E3%82%AD%E3…​
Website : https://kino-code.com/​

#SQL #データベース #HAVING #グルーピング #条件

コメント

  1. Dedie Morikawa より:

    0:44
    vol.wtf

  2. dai より:

    タイトル6と7間違ってますよ

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