MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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ごとの合計値を簡単に集計できます。売上データの集計など実務でも頻繁に使われるテクニックなので、ぜひマスターしておきましょう。

  1. MySQLでGROUP BYを使ってグループ化し合計(SUM)を求める方法

    MySQLで合計を求めるには、集計関数SUM()を使用します。さらにGROUP BY句と組み合わせることで、特定のカラムごとにデータをグループ化し、それぞれのグループの合計値を取得できます。この記事では、商品名ごとに「数量 × 価格」の合計を求める例を通じて、GROUP BYとSUM()の基本的な使い方を解説します。 1. サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 mysql> create table DemoTable -> ( -> ProductName varchar(20), -> ProductQuant

  2. MySQLでテーブル内の特定の行だけを削除する方法|NOT IN()を使った実践テクニック

    MySQLで特定の行以外を一括削除したい場合、NOT IN() 演算子を使用すると簡単に実現できます。NOT IN() は「指定した値のリストに含まれない行」を対象にできるため、残したい行のIDを列挙すれば、それ以外の行だけを効率よく削除できます。この記事では、サンプルテーブルを作成し、実際にデータを挿入してから、NOT IN() を使って特定の行のみを削除する手順を解説します。1. サンプルテーブルの作成まずは、StudentId を自動採番(AUTO_INCREMENT)に設定したテーブルを作成します。AUTO_INCREMENT=101 を指定することで、IDは101から順番に割り振られ