【MySQL】HAVING - グループ化データの検索条件

【MySQL】HAVING - グループ化データの検索条件

MySQLのHAVINGについて解説します。

検証環境

HAVING

HAVING句は“GROUP BY句でグループ化したカラムに対して対象条件を指定する句”です。

WHERE句のように比較演算、論理演算によって条件を指定できます。

基本構文

HAVING 条件

条件の部分にGROUP BY句でグループ化したカラムを使った条件を記述します。

サンプル

mysql> SELECT * FROM items;
+----+-----------+-------+-------+
| id | name      | price | stock |
+----+-----------+-------+-------+
|  1 | Apple     |   200 |    10 |
|  2 | Orange    |   150 |     3 |
|  3 | Apple     |   300 |     5 |
|  4 | Pineapple |  1100 |     1 |
|  5 | Grapes    |  3500 |     1 |
|  6 | Pineapple |  2000 |     3 |
+----+-----------+-------+-------+
6 rows in set (0.01 sec)

mysql> SELECT name, SUM(stock) AS total_stock FROM items
    -> GROUP BY name
    ___ih_hl_start
    -> HAVING total_stock < 10;
    ___ih_hl_end
+-----------+-------------+
| name      | total_stock |
+-----------+-------------+
| Orange    |           3 |
| Pineapple |           4 |
| Grapes    |           1 |
+-----------+-------------+
3 rows in set (0.00 sec)

16行目のHAVING total_stock < 10がHAVING句です。

GROUP BY句によってnameカラムでグループ化し、SUM関数でstockカラムの合計値を計算しています。

HAVING句でtotal_stockstockの合計値)を使った条件を指定しているため、Appleのデータは表示されません。