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」という別々の列に表示されました。売上と返品、入金と出金など、符号で区別されるデータを集計したい場合に非常に便利なテクニックなので、ぜひ活用してください。
-
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
-
MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法
ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形