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

値を持たない列を引数に渡した場合、MySQLのSUM()関数は何を返すのか

値を持たない列に対するSUM()関数の動作

MySQLのSUM()関数に、値が1つも格納されていない列(空の列)を引数として渡した場合、出力としては0ではなくNULLが返されます。これは列のデータ型に関係なく同じ動作となります。

直感的には「合計だから0になるのでは?」と思いがちですが、SUM()関数は集計対象となる行が存在しない場合、結果を確定できないためNULLを返す仕様になっています。以下の例で確認してみましょう。

例:空のテーブルでのSUM()関数

ここでは、「id」という1つの列のみを持ち、かつデータが1件も登録されていないテーブル「social」を使用します。

mysql> Describe Social;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id    | int(11)     | YES  |     |  NULL   |       |
| Name  | varchar(20) | YES  |     |  NULL   |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> Select * from Social;
Empty set (0.00 sec)

mysql> Select SUM(id) from Social;
+---------+
| SUM(id) |
+---------+
| NULL    |
+---------+
1 row in set (0.00 sec)

mysql> Select SUM(Name) from Social;
+-----------+
| SUM(Name) |
+-----------+
| NULL      |
+-----------+
1 row in set (0.00 sec)

上記の出力から分かるように、数値型のid列だけでなく、文字列型のName列を引数に渡した場合でも、どちらもNULLが返されています。テーブル自体が空であるため、SUM()関数は集計する対象を持たず、その結果としてNULLを返すのです。

NULLではなく0を返したい場合

アプリケーション側で0として扱いたい場合は、COALESCE()関数やIFNULL()関数を組み合わせるのが一般的です。

mysql> SELECT COALESCE(SUM(id), 0) FROM Social;
+----------------------+
| COALESCE(SUM(id), 0) |
+----------------------+
| 0                    |
+----------------------+
1 row in set (0.00 sec)

このように書くことで、集計対象が存在しない場合でもNULLの代わりに0を取得できます。レポートや集計処理などでNULLを許容したくない場面では、ぜひ活用してください。

  1. MySQLでNULL値が複数ある列にDISTINCT句を使うとどうなる?返される結果を解説

    NULL値が複数ある列にDISTINCT句を使った場合のMySQLの動作 MySQLでは、複数のNULL値が含まれる列に対してDISTINCT句を使用すると、すべてのNULL値は同一の値として扱われます。 これはDISTINCT句の仕様によるもので、結果セットにはNULL値が1つだけ返され、残りの重複するNULL値は除外されます。一見するとNULLは「値ではない」ため区別されそうに思えますが、MySQLはDISTINCT処理においてNULL同士を等しいものとみなす点に注意が必要です。 具体例:testingテーブルでの確認 ここでは、列「Lname」に複数のNULL値が含まれるテーブル「te

  2. MySQLで列の値を合計する方法|SUM関数の使い方を解説

    MySQLである列の値の合計を求めたい場合は、集計関数 SUM() を使用します。SUM関数は、指定したカラム(列)に格納されている数値をすべて加算し、その合計値を1つの結果として返してくれる便利な関数です。ここでは、実際にサンプルテーブルを作成し、SUM関数で列の合計値を取得する手順を順番に見ていきましょう。1. サンプルテーブルの作成まずは、CREATE TABLE文でテスト用のテーブルを作成します。 ); Query OK, 0 rows affected (0.71 sec)この例では、自動採番される主キー「Id」と、金額を格納する整数型のカラム「€」を持つテーブルを作成しています。2