【SQLServer】HAVING句でGroupByした表に条件指定する
-
カテゴリ:
- DB
-
タグ:
- #SQLServer
SQLServerに限らず、グループ化した(GroupBy)表に対して条件指定する際は、HAVING句が重宝します。今回はHAVING句の使い方を簡単にここにメモしておきます。
HAVING句
HAVING句はGroupByした表に条件を付け加えるときに便利です。
例えば以下のテーブルがあったとします。
商品テーブル
+---------------+------------+
| 分類 | 商品 |
+---------------+------------+
| 家電製品 | テレビ |
| 家電製品 | 冷蔵庫 |
| 家電製品 | パソコン |
| 家電製品 | 洗濯機 |
| 食料品 | ウーロン茶 |
| 食料品 | りんご |
| 食料品 | バナナ |
| 生活・文化用品 | スーツ |
| 生活・文化用品 | シャツ |
| 生活・文化用品 | 靴下 |
| 生活・文化用品 | テーブル |
| 生活・文化用品 | 椅子 |
+---------------+------------+
この表に対して、分類ごとの商品数を出すためにGroup Byをすると以下の通りになります。
SELECT 分類, COUNT(分類) AS カウント FROM 商品テーブル GROUP BY 分類;
+---------------+------------+
| 分類 | カウント |
+---------------+------------+
| 家電製品 | 4 |
| 食料品 | 3 |
| 生活・文化用品 | 5 |
+---------------+------------+
さらにグループ化した表からカウントが4つ以上の分類を取得する際、HAVING句を使わずに実現するには以下のようにサブクエリを使う必要があり、SQLが長くなってしまい面倒です。
SELECT G.*
FROM (
SELECT 分類, COUNT(分類) AS カウント FROM 商品テーブル GROUP BY 分類
) AS G
WHERE
G.カウント>= 4
;
+---------------+------------+
| 分類 | カウント |
+---------------+------------+
| 家電製品 | 4 |
| 生活・文化用品 | 5 |
+---------------+------------+
ここでHAVING句を使うことで、サブクエリを使わずにSQLを簡略化することができます。
SELECT 分類, COUNT(分類) AS カウント FROM 商品テーブル GROUP BY 分類 HAVING COUNT(分類) >= 4;
+---------------+------------+
| 分類 | カウント |
+---------------+------------+
| 家電製品 | 4 |
| 生活・文化用品 | 5 |
+---------------+------------+
以上です!!
投稿日:2020-10-01
更新日:2020-10-01