如果没有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 | 

使用IFNULLCOALESCE

 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