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

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

MySQLで合計を求めるには、集計関数SUM()を使用します。さらにGROUP BY句と組み合わせることで、特定のカラムごとにデータをグループ化し、それぞれのグループの合計値を取得できます。

この記事では、商品名ごとに「数量 × 価格」の合計を求める例を通じて、GROUP BYとSUM()の基本的な使い方を解説します。

1. サンプルテーブルの作成

まず、以下のようにテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> ProductName varchar(20),
    -> ProductQuantity int,
    -> ProductPrice int
    -> );
Query OK, 0 rows affected (0.63 sec)

このテーブルは、商品名(ProductName)、数量(ProductQuantity)、価格(ProductPrice)の3つのカラムを持っています。

2. テストデータの挿入

次に、INSERTコマンドを使ってレコードを挿入します。

mysql> insert into DemoTable values('Product-1',2,50);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Product-2',3,80);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Product-2',4,100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Product-1',4,150);
Query OK, 1 row affected (0.11 sec)

3. 挿入したレコードの確認

SELECT文で、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下の通りです。

+-------------+-----------------+--------------+
| ProductName | ProductQuantity | ProductPrice |
+-------------+-----------------+--------------+
| Product-1   |               2 |           50 |
| Product-2   |               3 |           80 |
| Product-2   |               4 |          100 |
| Product-1   |               4 |          150 |
+-------------+-----------------+--------------+
4 rows in set (0.00 sec)

同じ商品名(Product-1、Product-2)が複数行登録されていることがわかります。

4. GROUP BYとSUM()でグループ化して合計を求める

ここからが本題です。商品名ごとにグループ化し、「数量 × 価格」の合計を算出するクエリは以下の通りです。

mysql> select *,sum(ProductQuantity*ProductPrice) as Total from DemoTable
    -> group by ProductName;

実行結果:

+-------------+-----------------+--------------+-------+
| ProductName | ProductQuantity | ProductPrice | Total |
+-------------+-----------------+--------------+-------+
| Product-1   |               2 |           50 |   700 |
| Product-2   |               3 |           80 |   640 |
+-------------+-----------------+--------------+-------+
2 rows in set (0.00 sec)

クエリのポイント

  • sum(ProductQuantity*ProductPrice):各行の「数量 × 価格」を計算し、グループ内で合計しています。
  • as Total:計算結果に「Total」という別名を付けて、読みやすい結果にしています。
  • group by ProductName:商品名ごとに行をまとめ、各グループの合計を1行として表示します。

結果を見ると、Product-1の合計は「2×50 + 4×150 = 700」、Product-2の合計は「3×80 + 4×100 = 640」と正しく計算されていることが確認できます。

まとめ

MySQLでグループごとの合計を求める場合は、SUM()GROUP BYを組み合わせるのが基本です。売上集計や在庫管理など、実務でも頻繁に使われるパターンなので、ぜひ覚えておきましょう。なお、MySQL 5.7以降ではONLY_FULL_GROUP_BYモードが有効になっている場合があるため、GROUP BYに指定していないカラムをSELECTする際は、ANY_VALUE()関数の利用やSQLモードの設定変更を検討してください。

  1. MySQLで1つのクエリを使ってSELECTとINSERTを同時に実行する方法

    MySQLでは、INSERT INTO ... SELECT構文とUNION ALLを組み合わせることで、1つのクエリだけで別テーブルからデータを選択(SELECT)し、挿入(INSERT)することができます。本記事では、実際のサンプルコードを使ってその手順をわかりやすく解説します。1. 最初のテーブルを作成するまず、データの挿入先となる最初のテーブルを作成します。以下のクエリを実行してください。mysql> create table DemoTable1 -> ( -> StudentName varchar(20), -> StudentMarks

  2. MySQLでSELECTクエリを使用してデータを挿入(INSERT)する方法

    MySQLでは、INSERT文とSELECTクエリを組み合わせることで、テーブルにデータを挿入することができます。通常、SELECTは既存のテーブルからデータを取得するために使われますが、値を直接指定してINSERTを実行する際にも活用できる便利な手法です。基本構文SELECTクエリを使用してINSERTを実行する場合の構文は以下の通りです。insert into yourTableName(yourColumnName1,yourColumnName2,yourColumnName3,...N) select yourValue1,yourValue2,yourValue3,......N;