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

MySQLで同じ顧客の複数行の製品価格をSUM()とGROUP BYで合計して表示する方法

SUM()とGROUP BYを使った顧客別の価格合計

同じ顧客が複数行に分かれて登録されているデータで、各行の製品価格を合計し、顧客ごとに結果をまとめて表示するには、SUM()関数とGROUP BY句を組み合わせて使用します。ここでは、実際のサンプルコードを使いながら手順を解説します。

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

まず、顧客名と2つの製品価格を格納するテーブルを作成します。

mysql> create table DemoTable
(
    CustomerName varchar(100),
    Product_1_Price int,
    Product_2_Price int
);
Query OK, 0 rows affected (0.73 sec)

2. レコードの挿入

INSERTコマンドを使用して、テーブルにいくつかのレコードを挿入します。ここでは、JohnとDavidという2人の顧客がそれぞれ2行ずつ登録されています。

mysql> insert into DemoTable values('John',67,89);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David',769,890);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('David',987,1000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('John',900,111);
Query OK, 1 row affected (0.12 sec)

3. テーブルの内容を確認する

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

mysql> select *from DemoTable;

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

+--------------+-----------------+-----------------+
| CustomerName | Product_1_Price | Product_2_Price |
+--------------+-----------------+-----------------+
| John         |              67 |              89 |
| David        |             769 |             890 |
| David        |             987 |            1000 |
| John         |             900 |             111 |
+--------------+-----------------+-----------------+
4 rows in set (0.00 sec)

このように、同じ顧客名(JohnとDavid)が複数行に登録されていることが確認できます。

4. 顧客ごとに価格を合計するクエリ

次のクエリでは、SUM()関数で各製品価格の合計値を求め、GROUP BY句で顧客名ごとにグループ化して結果を表示します。

mysql> select CustomerName,SUM(Product_1_Price) AS Total1,SUM(Product_2_Price) As Total2 from DemoTable group by CustomerName;

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

+--------------+--------+--------+
| CustomerName | Total1 | Total2 |
+--------------+--------+--------+
| John         |    967 |    200 |
| David        |   1756 |   1890 |
+--------------+--------+--------+
2 rows in set (0.00 sec)

結果の解説

上記の出力から、以下の合計が正しく算出されていることがわかります。

  • John:Product_1_Priceの合計は967(67 + 900)、Product_2_Priceの合計は200(89 + 111)
  • David:Product_1_Priceの合計は1756(769 + 987)、Product_2_Priceの合計は1890(890 + 1000)

AS句を使ってエイリアス(Total1、Total2)を付けることで、結果セットの列見出しもわかりやすく表示されます。このように、SUM()とGROUP BYを組み合わせれば、同一顧客の複数レコードに分散した価格データを簡単に集計できます。

  1. MySQLで行の値を合計して結果を並べ替えるクエリの書き方

    MySQLで行の値を合計し、結果を並べ替える方法テーブル内の同じキーを持つ行の値を合計し、その結果を並べ替えたい場合には、GROUP BY句とORDER BY句を組み合わせて使用します。GROUP BYで対象の列ごとにデータをグループ化し、SUM関数で合計値を算出した後、ORDER BYで並べ替えるという流れになります。ここでは、生徒名と点数が登録されたテーブルを例に、生徒ごとの合計点を降順で取得する手順を解説します。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成します。mysql> create table DemoTable1499 &nb

  2. MySQLで2つの列のすべての値をカウントし、NULL値を除外する方法

    MySQLでは、COUNT関数を組み合わせることで、複数の列に含まれるすべての値をカウントできます。COUNT関数はNULL値を自動的に除外するため、NULLが混在するデータでも正確な合計件数を取得できるのが特徴です。ここでは、2つの列の値をカウントし、NULL値を除外した合計カウントを求める方法を具体的な例で解説します。 1. サンプルテーブルの作成 まず、学生名と点数を格納するテーブルを作成します。 mysql> create table DemoTable1975     (     StudentNa