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など)に置き換えておくと、より安全で扱いやすい出力になります。
-
MySQLのIN()関数で列名を指定し、リストの値と比較して該当行を抽出する方法
このシナリオでは、列の名前を「式(Expression)」としてIN()関数に指定し、その列の値をリスト内の値と比較します。列の値がリスト内のいずれかの値と一致した場合、その行が出力として返されます。理解を深めるために、以下のデータを持つ「Employee」テーブルを例に見てみましょう。mysql> Select * from Employee; +----+--------+--------+ | ID | Name | Salary | +----+--------+--------+ | 1 | Gaurav | 50000 | | 2 | Rahul | 20000
-
MySQLで月ごとにテーブルの値を合計する方法を解説
MySQLでテーブル内の値を月ごとに合計したい場合は、EXTRACT()関数を使用します。この関数を使うことで、日付から特定の月の情報を抽出できます。例えば、年に関係なく1月のすべての価格を合計したい場合などに便利です。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1415 -> ( -> ProductPurchaseDate date, -> ProductPrice int -> ); Query OK, 0 rows affected (0.53 se