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

MySQLでIF条件を使ったSUM(合計)クエリの書き方を実例で解説

MySQLのSUM関数とIF条件を組み合わせた集計クエリとは

MySQLにおけるSUM()は、数値カラムの合計値を求めるための代表的な集計関数です。IF()関数と組み合わせることで、「特定の条件に一致する行だけを対象に合計を計算する」という柔軟な集計が可能になります。

この記事では、実際にサンプルテーブルを作成し、IF条件付きのSUMクエリの使い方を段階的に解説します。

サンプルテーブルの作成

まず、支払い方法と金額を格納するテーブルを作成します。テーブル作成用のクエリは次のとおりです。

mysql> create table SumWithIfCondition
    -> (
    -> ModeOfPayment varchar(100)
    ,
    -> Amount int
    -> );
Query OK, 0 rows affected (1.60 sec)

これで「ModeOfPayment(支払い方法)」と「Amount(金額)」の2つのカラムを持つテーブルが完成しました。

テストデータの挿入

続いて、INSERT文を使ってレコードを挿入します。実行するクエリは以下のとおりです。

mysql> insert into SumWithIfCondition values('Offline',10);
Query OK, 1 row affected (0.21 sec)

mysql> insert into SumWithIfCondition values('Online',100);
Query OK, 1 row affected (0.16 sec)

mysql> insert into SumWithIfCondition values('Offline',20);
Query OK, 1 row affected (0.13 sec)

mysql> insert into SumWithIfCondition values('Online',200);
Query OK, 1 row affected (0.16 sec)

mysql> insert into SumWithIfCondition values('Offline',30);
Query OK, 1 row affected (0.11 sec)

mysql> insert into SumWithIfCondition values('Online',300);
Query OK, 1 row affected (0.17 sec)

オンライン(Online)とオフライン(Offline)の支払いデータがそれぞれ3件ずつ登録されました。

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。実行するクエリは次のとおりです。

mysql> select *from SumWithIfCondition;

実行結果は以下のようになります。

+---------------+--------+
| ModeOfPayment | Amount |
+---------------+--------+
| Offline       |     10 |
| Online        |    100 |
| Offline       |     20 |
| Online        |    200 |
| Offline       |     30 |
| Online        |    300 |
+---------------+--------+
6 rows in set (0.00 sec)

IF条件付きSUMクエリの基本構文

IF条件とSUMを組み合わせる際の基本的な書式は以下のとおりです。

SUM(IF(条件, 条件が真の場合の値, 条件が偽の場合の値))

条件に一致した行のみAmountの値が加算され、一致しない行は0として扱われるため、実質的に「条件に該当する行だけの合計」を求められます。

ケース1:オンライン決済(Online)の合計を求める

支払い方法が「Online」の行だけを対象に合計を計算するクエリは次のとおりです。

mysql> select sum(if(ModeOfPayment = 'Online',Amount,0)) as TotalAmount from SumWithIfCondition;

実行結果:

+-------------+
| TotalAmount |
+-------------+
|         600 |
+-------------+
1 row in set (0.00 sec)

「Online」の金額(100+200+300)の合計である600が正しく取得できました。

ケース2:オフライン決済(Offline)の合計を求める

同様に、支払い方法が「Offline」の行だけを合計するクエリは以下のとおりです。

mysql> select sum(if(ModeOfPayment = 'Offline',Amount,0)) as TotalAmount from SumWithIfCondition;

実行結果:

+-------------+
| TotalAmount |
+-------------+
|          60 |
+-------------+
1 row in set (0.00 sec)

「Offline」の金額(10+20+30)の合計である60が返されました。

まとめ

このように、MySQLではSUM(IF(条件, 値, 0))の形式を使うことで、WHERE句で絞り込むことなく、1つのクエリ内で条件別の合計値を簡単に算出できます。複数の条件ごとの合計を一度に取得したい場合にも応用できるため、売上集計やレポート作成などの実務で非常に便利なテクニックです。

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

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

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

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