如果没有find任何值,我如何获得MySQL中的SUM函数返回“0”?
假设我在MySQL中有一个简单的函数:
SELECT SUM(Column 1) from Table WHERE Column 2='Test'
如果列2中没有条目包含文本“testing”,那么这个函数返回NULL,而我希望它返回0。
我知道有一个类似的问题在这里被问了几次,但是我还没有能够将答案适应于我的目的,所以我希望得到一些帮助来完成这个sorting。
使用COALESCE
来避免这种结果。
SELECT COALESCE(SUM(column),0) FROM table WHERE ...
要看到它的行动,请看这个SQL小提琴: http ://www.sqlfiddle.com/#!2/d1542/3 /0
更多信息:
给定三个表格(一个是所有的数字,一个是空的,另一个是混合的):
SQL小提琴
MySQL 5.5.32架构设置 :
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);
查询1 :
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
结果 :
| 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 |
使用IFNULL
或COALESCE
:
SELECT IFNULL(SUM(Column1), 0) AS total FROM... SELECT COALESCE(SUM(Column1), 0) AS total FROM...
它们之间的区别在于, IFNULL
是一个MySQL扩展,它有两个参数, COALESCE
是一个标准的SQL函数,可以接受一个或多个参数。 当你只有两个使用IFNULL
参数稍微快一点,虽然这里的差别是微不足道的,因为它只被调用一次。
不能得到确切的问题,但如果您使用的是一个汇总SUM函数,这意味着你正在分组表。
查询是这样的MYSQL
Select IFNULL(SUM(COLUMN1),0) as total from mytable group by condition