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

MySQLのSUM()関数で一致する行がない場合にNULLではなく0を返す方法

MySQLでは、SUM()関数は一致する行が存在しない場合にNULLを返します。しかし、集計結果をアプリケーションで扱う際などには、NULLではなく0を返してほしいケースが少なくありません。

このような場合に活躍するのが、MySQLのCOALESCE()関数です。COALESCE()関数は2つの引数を受け取り、最初の引数がNULLであれば2番目の引数を返し、NULLでなければ最初の引数をそのまま返します。これを利用することで、SUM()の結果がNULLになるのを防ぎ、代わりに0を表示させることができます。

サンプルテーブルの準備

この概念を理解するために、以下のレコードを持つ「employee_tbl」テーブルを例に考えてみましょう。

mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
| id   | name | work_date  | daily_typing_pages |
+------+------+------------+--------------------+
| 1    | John | 2007-01-24 |         250        |
| 2    | Ram  | 2007-05-27 |         220        |
| 3    | Jack | 2007-05-06 |         170        |
| 3    | Jack | 2007-04-06 |         100        |
| 4    | Jill | 2007-04-06 |         220        |
| 5    | Zara | 2007-06-06 |         300        |
| 5    | Zara | 2007-02-06 |         350        |
+------+------+------------+--------------------+
7 rows in set (0.00 sec)

COALESCE()とSUM()を組み合わせた実行例

次に、COALESCE()関数とSUM()関数を組み合わせて、「Name」列に存在しない名前「Mohan」が入力したページ数の合計を求めてみます。通常であればSUM()はNULLを返しますが、COALESCE()を挟むことで結果は0になります。

mysql> SELECT COALESCE(SUM(daily_typing_pages),0) AS 'SUM(daily_typing_pages)' FROM employee_tbl WHERE Name = 'Mohan';
+-------------------------+
| SUM(daily_typing_pages) |
+-------------------------+
|            0            |
+-------------------------+
1 row in set (0.00 sec)

このように、COALESCE(SUM(列名), 0)という書き方を使えば、該当する行が1件も存在しない場合でも、集計結果をNULLではなく0として取得できます。レポート作成やアプリケーション側でのNULLチェックを省略したい場合に、非常に便利なテクニックです。

  1. MySQLで設定したインデックスを確認・表示する方法【SHOW INDEXコマンド】

    MySQLで作成済みのインデックスを確認したい場合は、SHOWコマンドを使用します。この記事では、実際にテーブルとインデックスを作成しながら、インデックス情報を表示する手順をわかりやすく解説します。インデックスを表示する基本構文テーブルに設定されたインデックスの一覧を取得するには、以下の構文を使用します。show index from テーブル名;サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。以下の例では、自動採番される主キー「Id」と、姓名を格納するカラムを持つテーブルを定義しています。mysql> create table DemoTable (

  2. MySQLのWHERE句でSUM()関数の結果は使用できる?HAVING句を使った正しい書き方を解説

    MySQLでは、SUM()などの集計関数の結果をWHERE句で直接使用することはできません。これは、WHERE句がグループ化の前に行単位で評価されるためです。代わりに、GROUP BYと組み合わせたHAVING句を使うことで、集計結果に基づいた絞り込みが可能になります。 ここからは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。 1. サンプルテーブルの作成 まず、名前と価格を持つテーブルを作成します。 mysql> create table DemoTable ( Name varchar(50), Price int ); Query OK, 0