MySQLでHAVING句とSUM()関数を組み合わせて使う方法
HAVING句とSUM()関数の組み合わせとは
MySQLでは、SUM()関数をHAVING句と組み合わせることで、集計結果に対して特定の条件を適用し、条件を満たすレコードだけを抽出できます。WHERE句が集計前の個々の行に条件を適用するのに対し、HAVING句はGROUP BYによるグループ化後の集計値に条件を課す点が大きな特徴です。
サンプルテーブルの準備
ここでは、以下のレコードを持つ「employee_tbl」テーブルを例に説明します。
mysql> SELECT * FROM employee_tbl; +------+------+------------+--------------------+ | id | name | work_date | daily_typing_pages | +------+------+------------+--------------------+ | 1 | John | 2007-01-24 | 250 | | 2 | Ram | 2007-05-27 | 220 | | 3 | Jack | 2007-05-06 | 170 | | 3 | Jack | 2007-04-06 | 100 | | 4 | Jill | 2007-04-06 | 220 | | 5 | Zara | 2007-06-06 | 300 | | 5 | Zara | 2007-02-06 | 350 | +------+------+------------+--------------------+ 7 rows in set (0.00 sec)
このテーブルには、従業員ごとの日付別タイピングページ数(daily_typing_pages)が記録されています。同じ従業員が複数日のデータを持っている場合もあります。
HAVING句で合計値を絞り込むクエリ
次のクエリでは、GROUP BYで名前ごとにグループ化した上で、SUM()関数でdaily_typing_pagesの合計を計算し、HAVING句によって合計が250を超える従業員のみを取得しています。
mysql> SELECT Name, SUM(daily_typing_pages) FROM employee_tbl GROUP BY name HAVING SUM(daily_typing_pages) > 250; +------+-------------------------+ | name | SUM(daily_typing_pages) | +------+-------------------------+ | Jack | 270 | | Zara | 650 | +------+-------------------------+ 2 rows in set (0.17 sec)
実行結果の解説
結果を見ると、Jackは170ページと100ページの合計270ページ、Zaraは300ページと350ページの合計650ページとなり、いずれも250を超えているため抽出されました。一方、John(250)、Ram(220)、Jill(220)は条件を満たさないため除外されています。
このように、HAVING句は集計関数の結果に対してフィルタリングを行うためのものであり、「合計金額が一定額以上の顧客」「売上件数が特定数を超える商品」などの集計条件での絞り込みに幅広く活用できます。
-
MySQLでSUM()とIF()を組み合わせて条件付き集計を行う方法
はい、MySQLではSUM()とIF()を組み合わせて使用できます。この2つを併用すると、「特定の条件に一致する値だけを数える」「条件ごとに集計する」といった柔軟な処理が可能になります。ここでは、実際にデモテーブルを作成しながら、その使い方を順番に見ていきましょう。 1. デモテーブルを作成する まず、動作確認用のサンプルテーブルを作成します。 mysql> create table DemoTable ( Value int, Value2 int ); Query OK, 0 rows affected (0.51 sec) 2. テーブルにデータを挿入する I
-
MySQLのWHERE句でSUM()関数の結果は使用できる?HAVING句を使った正しい書き方を解説
MySQLでは、SUM()などの集計関数の結果をWHERE句で直接使用することはできません。これは、WHERE句がグループ化の前に行単位で評価されるためです。代わりに、GROUP BYと組み合わせたHAVING句を使うことで、集計結果に基づいた絞り込みが可能になります。 ここからは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。 1. サンプルテーブルの作成 まず、名前と価格を持つテーブルを作成します。 mysql> create table DemoTable ( Name varchar(50), Price int ); Query OK, 0