如何在 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中文网其他相关文章!