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

MySQLで条件に基づいて列の値を合計する方法(SUM句とWHERE句の使い方)

MySQLでは、SUM()関数とWHERE句を組み合わせることで、特定の条件を満たすレコードだけを対象に列の合計値を簡単に求めることができます。本記事では、実際にテーブルを作成し、データを挿入してから、条件に基づいた合計を取得する手順を詳しく解説します。

1. テーブルの作成

まず、サンプル用のテーブルを作成します。以下のコマンドを実行してください。

mysql> create table DemoTable
(
    CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ProductAmount int,
    CustomerCountryName varchar(10)
);
Query OK, 0 rows affected (0.86 sec)

このテーブルは、顧客ID(CustomerId)、商品金額(ProductAmount)、顧客の国名(CustomerCountryName)の3つの列で構成されています。

2. レコードの挿入

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

mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(190,'US');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(200,'UK');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(1500,'AUS');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(2010,'US');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(7890,'UK');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(ProductAmount,CustomerCountryName) values(500,'US');
Query OK, 1 row affected (0.21 sec)

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

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

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+------------+---------------+---------------------+
| CustomerId | ProductAmount | CustomerCountryName |
+------------+---------------+---------------------+
|          1 |           190 | US                  |
|          2 |           200 | UK                  |
|          3 |          1500 | AUS                 |
|          4 |          2010 | US                  |
|          5 |          7890 | UK                  |
|          6 |           500 | US                  |
+------------+---------------+---------------------+
6 rows in set (0.00 sec)

4. 条件に基づいて列を合計するクエリ

ここからが本題です。条件に基づいて列を合計するには、SUM()関数とWHERE句を組み合わせます。例として、国名が「US」の顧客のレコードだけを対象に、商品金額の合計を求めてみましょう。

mysql> select SUM(ProductAmount) AS Total_Amount from DemoTable where CustomerCountryName='US';

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

+--------------+
| Total_Amount |
+--------------+
|         2700 |
+--------------+
1 row in set (0.00 sec)

クエリの解説

このクエリのポイントは以下の通りです。

  • SUM(ProductAmount)ProductAmount列の値を合計します。
  • AS Total_Amount:合計結果の列に「Total_Amount」という別名を付けて、結果を見やすくしています。
  • WHERE CustomerCountryName='US':国名が「US」のレコードのみを集計対象として絞り込みます。

このように、WHERE句で条件を指定すれば、特定のグループ(ここでは「US」の顧客)に絞った合計値を取得できます。なお、条件を指定せずにテーブル全体の合計を求めたい場合は、WHERE句を省略するだけです。

さらに、国ごとの合計を一度に取得したい場合は、GROUP BY句を組み合わせるのが便利です。

mysql> select CustomerCountryName, SUM(ProductAmount) AS Total_Amount
    -> from DemoTable group by CustomerCountryName;

このクエリを実行すると、国別の合計金額が一覧で取得でき、データ分析の現場で非常に役立ちます。

  1. MySQLで別の列の条件に基づいて列の値を合計する方法

    MySQLである列の値を、別の列の条件(例えば入社日の「年」や「月」)が同じレコードごとに合計したい場合は、集計関数SUM()とGROUP BY句を組み合わせることで実現できます。 ここでは、従業員名(EmployeeName)、入社日(JoiningDate)、給与(Salary)を持つテーブルを例に、月ごとの給与合計を求める手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable     -> (    &nbs

  2. メールアドレスを条件にMySQLのカラムを更新する方法

    MySQLでは、UPDATE文のWHERE句にメールアドレスなどの条件を指定することで、特定の行だけを対象にカラムの値を更新できます。ここでは、実際の手順をサンプルコードとともに解説します。 1. テーブルの作成 まず、メールアドレスとスコアを格納するテーブルを作成します。 mysql> create table DemoTable -> ( -> EmailAddress varchar(20), -> Score int -> ); Query OK, 0 rows affected (1.05 sec) 2. レコードの挿入