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

MySQLのCOALESCE()関数とSUM()関数を組み合わせて出力をカスタマイズする方法

MySQLのSUM()関数は、値が一つも存在しない列を引数として受け取ると、0ではなくNULLを返すという仕様になっています。しかし、集計結果をアプリケーションやレポートで扱う際には、NULLのままにせず「0」と表示させたいケースがよくあります。そのような場合に役立つのが、MySQLのCOALESCE()関数です。

COALESCE()関数は、引数として渡された値の中から最初のNULLでない値を返す関数です。2つの引数を指定した場合、最初の引数がNULLであれば2番目の引数を返し、NULLでなければ最初の引数をそのまま返します。この特性を利用することで、SUM()関数の結果がNULLになったときに、任意の値(例:0)へ置き換えることができます。

検証に使用するテーブル

ここでは、以下のデータを持つ「tender」テーブルを例に説明します。

mysql> Select * from tender;

+----+---------------+--------------+
| Sr | CompanyName | Tender_value |
+----+---------------+--------------+
| 1 | Abc Corp. | 250.369003 |
| 2 | Khaitan Corp. | 265.588989 |
| 3 | Singla group. | 220.255997 |
| 4 | Hero group. | 221.253006 |
| 5 | Honda group | NULL |
+----+---------------+--------------+

5 rows in set (0.00 sec)

SUM()関数単独ではNULLが返る

「Honda Group」が提示した入札額の合計をSUM()関数で求めると、該当する列の値がNULLであるため、結果もNULLとして返されます。

mysql> Select SUM(Tender_value) From Tender Where CompanyName = 'Honda Group';

+-------------------+
| SUM(Tender_value) |
+-------------------+
| NULL |
+-------------------+

1 row in set (0.00 sec)

COALESCE()関数と組み合わせて0を表示する

この出力をNULLから0にカスタマイズしたい場合は、COALESCE()関数をSUM()関数と組み合わせます。以下のようにクエリを書き換えることで、「Honda Group」の入札額の合計が0として表示されます。

mysql> Select COALESCE(SUM(Tender_value),0) From Tender Where CompanyName = 'Honda Group';

+-------------------------------+
| COALESCE(SUM(Tender_value),0) |
+-------------------------------+
| 0.000000 |
+-------------------------------+

1 row in set (0.00 sec)

存在しない値を検索した場合も同様

この動作は、テーブルに存在しない値を検索した場合も同じです。例えば、「employee_tbl」テーブルの「Name」列に存在しない「Mohan」が入力したページ数の合計を、COALESCE()関数とSUM()関数の組み合わせで求めると、結果はNULLではなく0として返されます。

mysql> SELECT COALESCE(SUM(daily_typing_pages),0) FROM employee_tbl WHERE Name = 'Mohan';

+-------------------------+
| SUM(daily_typing_pages) |
+-------------------------+
| 0 |
+-------------------------+

1 row in set (0.00 sec)

まとめ

上記の結果セットからわかるように、MySQLのSUM()関数は、列のデータ型に関係なく、対象となる値が一つも存在しない場合にはNULLを返します。NULLは後続の集計処理やアプリケーション側の計算で意図しないエラーの原因になることがあるため、COALESCE()関数を組み合わせてデフォルト値(0など)に置き換えておくと、より安全で扱いやすい出力になります。

  1. MySQLのIN()関数で列名を指定し、リストの値と比較して該当行を抽出する方法

    このシナリオでは、列の名前を「式(Expression)」としてIN()関数に指定し、その列の値をリスト内の値と比較します。列の値がリスト内のいずれかの値と一致した場合、その行が出力として返されます。理解を深めるために、以下のデータを持つ「Employee」テーブルを例に見てみましょう。mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000

  2. MySQLで月ごとにテーブルの値を合計する方法を解説

    MySQLでテーブル内の値を月ごとに合計したい場合は、EXTRACT()関数を使用します。この関数を使うことで、日付から特定の月の情報を抽出できます。例えば、年に関係なく1月のすべての価格を合計したい場合などに便利です。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1415 -> ( -> ProductPurchaseDate date, -> ProductPrice int -> ); Query OK, 0 rows affected (0.53 se