SQLでは、膨大なデータが管理されているデータベースを扱うため、様々なデータを取得して分析することができます。
ここでは、MySQLでHAVINGを活用したデータ取得について簡単に解説します。
【この記事はこんな方に向けて書いています】
・SQLの勉強をしてデータベースを扱ってみたい
・MySQLでHAVINGを使ってグループ化したデータから特定の条件で絞り込みたい
【目次】
・HAVING
・WHEREとHAVING
・まとめ
HAVINGを使うと、GROUP BYでグループ化したデータに対して、特定の条件に当てはまるデータだけ抽出することができます。
先日の記事で、スーパーの食品コーナーに並んでいる商品を格納したテーブルを作成しました。
商品データを少し変更し、商品の種類と賞味期限を追加しました。
テーブル「items」のデータを取得します。
GROUP BYと集計関数、HAVINGを使って、以下の商品データを取得します。
GROUP BYで商品の種類・賞味期限でグループ化
集計関数COUNTでグループ毎のデータ数を取得
HAVINGで賞味期限が2023年8月31日以前の商品データを抽出
データが取得できました。
賞味期限が2023年8月31日以前の商品の種類は野菜で、個数は3個あるようです。
このように、HAVINGを使うとグループ化したデータに対して絞り込みができます。
WHEREとHAVINGは似ているので、簡単に違いを解説します。
WHEREとHAVINGを使って「飲料」の商品データを取得します。
WHEREを使って「飲料」の商品データを取得しました。
HAVINGを使って「飲料」の商品データを取得しました。
これだけ見ると、違いがわかりません。
次に、上記でGROUP BYと集計関数、HAVINGを使って賞味期限が2023年8月31日以前の商品データを取得しましたが、WHEREを使って同じデータを取得してみます。
エラーが出てしまいました。
エラーの原因は、実行される順番にあります。
WHERE→GROUP BY→HAVINGの順番に実行されます。
WHEREはGROUP BYの前
HAVINGはGROUP BYの後
になります。
「飲料」の商品データを取得したときはGROUP BYがなかったので、WHEREでもHAVINGでも同じデータが取得できたということになります。
まとめ
・HAVINGを使うとグループ化したデータに対して特定の条件で絞り込みができる
・GROUP BYがなければWHEREでもHAVINGでも同じ絞り込みができる
・WHERE→GROUP BY→HAVINGの順番に実行される
ここまで読んで頂きありがとうございました。
-------------------------------------------------------------------------------------
【関連記事】
SQLの環境構築「MySQL」
SQLの基礎:「MySQLの起動」
SQLの基礎:「MySQLでデータ取得~GROUP BY~」
-------------------------------------------------------------------------------------
当ブログの記事一覧(カテゴリー別)