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

MySQLで列の正の値と負の値の合計を別々の列に表示する方法

MySQLで正の値と負の値の合計を別々の列に集計するには

MySQLでは、SUM関数CASE式を組み合わせることで、1つの列に含まれる正の値と負の値の合計を、それぞれ別々の列として集計・表示することができます。この記事では、実際にサンプルテーブルを作成し、具体的なSQLクエリの手順を解説します。

1. サンプルテーブルを作成する

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable(
   Id int,
   Value int
);
Query OK, 0 rows affected (0.51 sec)

2. レコードを挿入する

INSERT文を使って、正の値と負の値を含むレコードを挿入します。

mysql> insert into DemoTable values(10,100);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(10,-110);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(10,200);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(10,-678);
Query OK, 1 row affected (0.17 sec)

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

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

mysql> select *from DemoTable;

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

+------+-------+
| Id   | Value |
+------+-------+
|   10 |   100 |
|   10 |  -110 |
|   10 |   200 |
|   10 |  -678 |
+------+-------+
4 rows in set (0.00 sec)

4. 正の値と負の値の合計を別々の列で取得する

ここが本題となるクエリです。CASE式を使って条件分岐することで、正の値のみを合計する列と、負の値のみを合計する列をそれぞれ作成します。

mysql> select Id,
   sum(case when Value>0 then Value else 0 end) as Positive_Value,
   sum(case when Value<0 then Value else 0 end) as Negative_Value
   from DemoTable
   group by Id;

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

+------+----------------+----------------+
| Id   | Positive_Value | Negative_Value |
+------+----------------+----------------+
|   10 |            300 |           -788 |
+------+----------------+----------------+
1 row in set (0.00 sec)

クエリの解説

このクエリのポイントは以下の2点です。

  • CASE式による条件分岐: 「case when Value>0 then Value else 0 end」により、値が正の場合のみその値を返し、それ以外は0を返します。これをSUM関数で包むことで、正の値だけの合計が求められます。負の値についても同様に「Value<0」で判定しています。
  • GROUP BY句によるグループ化: 「group by Id」によってIdごとにレコードがまとめられ、各Id単位での正負それぞれの合計を算出できます。

上記の例では、正の値(100 + 200 = 300)と負の値(-110 + -678 = -788)が、それぞれ「Positive_Value」「Negative_Value」という別々の列に表示されました。売上と返品、入金と出金など、符号で区別されるデータを集計したい場合に非常に便利なテクニックなので、ぜひ活用してください。

  1. MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法

    MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1      (      DueDate date      ); Query OK, 0 ro

  2. MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法

    ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形