MySQLで同じIDの行を合計する方法:GROUP BYとHAVING句の使い方
MySQLで同じIDを持つ複数の行の値を合計したい場合、「GROUP BY」句と「HAVING」句を組み合わせて使用します。この記事では、テーブルの作成からクエリの実行まで、手順を追ってわかりやすく解説します。
サンプルテーブルの作成
まず、デモ用のテーブルを作成しましょう。ここでは「id」と「price」という2つのカラムを持つシンプルなテーブルを用意します。
例
mysql> create table demo84
-> (
-> id int,
-> price int
-> )
-> ;
Query OK, 0 rows affected (0.60 sec)
レコードの挿入
次に、INSERT文を使ってテーブルにデータを挿入します。同じIDに対して複数のレコードが登録されている点に注目してください。
例
mysql> insert into demo84 values(1,2000); Query OK, 1 row affected (0.08 sec) mysql> insert into demo84 values(1,2000); Query OK, 1 row affected (0.14 sec) mysql> insert into demo84 values(2,1800); Query OK, 1 row affected (0.14 sec) mysql> insert into demo84 values(2,2200); Query OK, 1 row affected (0.14 sec) mysql> insert into demo84 values(3,1700); Query OK, 1 row affected (0.12 sec)
登録データの確認
SELECT文でテーブルの中身を確認してみましょう。
例
mysql> select *from demo84;
上記のクエリを実行すると、以下のような結果が出力されます。
出力結果
+------+-------+ | id | price | +------+-------+ | 1 | 2000 | | 1 | 2000 | | 2 | 1800 | | 2 | 2200 | | 3 | 1700 | +------+-------+ 5 rows in set (0.00 sec)
同じIDの行を合計するクエリ
それでは本題です。同じIDごとにpriceの合計値を求めるには、GROUP BY句でidをグループ化し、SUM関数で合計を計算します。さらにHAVING句を組み合わせることで、合計値が特定の条件(ここでは2000以上)を満たすグループだけを抽出できます。
例
mysql> select id,sum(price) as Total from demo84
-> group by id
-> having sum(demo84.price) >=2000;
このクエリを実行すると、以下のような結果が出力されます。
出力結果
+------+-------+ | id | Total | +------+-------+ | 1 | 4000 | | 2 | 4000 | +------+-------+ 2 rows in set (0.00 sec)
各句の役割まとめ
- GROUP BY句:同じIDの行をひとつのグループにまとめます。
- SUM関数:各グループ内のpriceの合計値を計算します。「as Total」で別名を付けることで、結果が読みやすくなります。
- HAVING句:集計後の結果に対して条件を指定します。WHERE句との違いは、集計関数の結果に対してフィルタリングできる点です。
このように、GROUP BY句とHAVING句を活用することで、IDごとの合計値を簡単に集計できます。売上データの集計など実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。
-
MySQLでGROUP BYを使ってグループ化し合計(SUM)を求める方法
MySQLで合計を求めるには、集計関数SUM()を使用します。さらにGROUP BY句と組み合わせることで、特定のカラムごとにデータをグループ化し、それぞれのグループの合計値を取得できます。この記事では、商品名ごとに「数量 × 価格」の合計を求める例を通じて、GROUP BYとSUM()の基本的な使い方を解説します。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable -> ( -> ProductName varchar(20), -> ProductQuant
-
MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック
MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ