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;
このクエリを実行すると、国別の合計金額が一覧で取得でき、データ分析の現場で非常に役立ちます。
-
MySQLで別の列の条件に基づいて列の値を合計する方法
MySQLである列の値を、別の列の条件(例えば入社日の「年」や「月」)が同じレコードごとに合計したい場合は、集計関数SUM()とGROUP BY句を組み合わせることで実現できます。 ここでは、従業員名(EmployeeName)、入社日(JoiningDate)、給与(Salary)を持つテーブルを例に、月ごとの給与合計を求める手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでテーブルを作成します。 mysql> create table DemoTable -> ( &nbs
-
メールアドレスを条件にMySQLのカラムを更新する方法
MySQLでは、UPDATE文のWHERE句にメールアドレスなどの条件を指定することで、特定の行だけを対象にカラムの値を更新できます。ここでは、実際の手順をサンプルコードとともに解説します。 1. テーブルの作成 まず、メールアドレスとスコアを格納するテーブルを作成します。 mysql> create table DemoTable -> ( -> EmailAddress varchar(20), -> Score int -> ); Query OK, 0 rows affected (1.05 sec) 2. レコードの挿入