如何在MySQL SUM 函數中處理NULL 值
在MySQL 中,SUM 函數在找不到值時通常會傳回NULL,這可以不方便。本文將探討如何使用 COALESCE 函數來確保 SUM 在未找到任何值時始終傳回「0」。
問題:
考慮如下查詢:
<code class="sql">SELECT SUM(Column_1) FROM Table WHERE Column_2 = 'Test'</code>
如果 Column_2 中沒有符合條件的條目,則函數會傳回 NULL。但是,我們可能更希望它回傳“0”。
解:使用 COALESCE
要解決此問題,請使用 COALESCE 函數。 COALESCE 將多個值作為參數並傳回第一個非 NULL 值。透過將其與 SUM 函數一起使用,我們可以確保遇到 NULL 時結果始終為「0」。
<code class="sql">SELECT COALESCE(SUM(column),0) FROM table WHERE ...</code>
範例:
讓我們使用用於示範COALESCE 函數的SQL 小提琴:http://www.sqlfiddle.com/#!2/d1542 /3/0
其他資訊:
COALESCE函數也可以與其他函數一起使用來處理NULL 值。以下是使用三個具有不同值的表的示例:
MySQL 5.5.32 架構設置:
<code class="sql">CREATE TABLE foo ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO foo (val) VALUES (null), (1), (null), (2), (null), (3), (null), (4), (null), (5), (null), (6), (null); CREATE TABLE bar ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO bar (val) VALUES (1), (2), (3), (4), (5), (6); CREATE TABLE baz ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, val INT ); INSERT INTO baz (val) VALUES (null), (null), (null), (null), (null), (null);</code>
查詢:
<code class="sql">SELECT 'foo' as table_name, 'mixed null/non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM foo UNION ALL SELECT 'bar' as table_name, 'all non-null' as description, 21 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM bar UNION ALL SELECT 'baz' as table_name, 'all null' as description, 0 as expected_sum, COALESCE(SUM(val), 0) as actual_sum FROM baz</code>
結果:
TABLE_NAME | DESCRIPTION | EXPECTED_SUM | ACTUAL_SUM |
---|---|---|---|
foo | mixed null/non-null | 21 | 21 |
bar | all non-null | 21 | 21 |
baz | all null | 0 | 0 |
以上是如何防止 MySQL SUM 函數傳回 NULL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!