当前位置: 首页 > 面试题库 >

如果找不到值,如何在MySQL中获取SUM函数以返回“ 0”?

唐威
2023-03-14
问题内容

说我在MySQL中有一个简单的函数:

SELECT SUM(Column_1)
FROM Table
WHERE Column_2 = 'Test'

如果Column_2中没有任何条目包含文本’Test’,则此函数返回NULL,而我希望它返回0。

我知道这里曾多次问过类似的问题,但我仍无法根据自己的目的调整答案,因此,我很感谢能为您提供一些帮助。


问题答案:

使用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 |


 类似资料:
  • 问题内容: 我每月都有一组职位。现在,我需要一个数组,其中包含每个月发布的帖子总数。我尝试下面的MySql查询,它的工作正常,但我期望0(零)几个月没有记录。在这里,它不返回0。 我读到COUNT()不会返回“ 0”,那么我该如何实现呢? 我尝试了IFNULL()和COALESCE(),但仍然得到相同的结果。请帮助此查询。谢谢你...... 结果: 预期结果(没有一月份的职位): 样本数据: 问题

  • 问题内容: 我有以下选择语句,以获取流的下一个预定项目。如果没有匹配的行,我希望它返回默认值。这是我正在使用的行: 那应该可以获取最近计划的项目,但如果它早于查询之前30分钟,则不会。但是,如果用户未安排任何时间,则我需要一个默认值,以便流中实际播放某些内容。我尝试了以下方法: 和: 但是,如果未找到任何行,它将始终返回空结果。我该如何返回默认值? 问题答案: 一种方法 由于只返回一行,因此可以使

  • 我正在调用一个函数,其中有一个订户函数。此函数必须返回一个数组,但它给出了一个错误: 缺少订阅。 如何做到这一点?

  • 问题内容: 这听起来对你们中的几个人来说很容易,但是我什至无法弄清楚为什么我即使在收到很多帖子后也无法获得返回值:( 现在如果我打电话; 它给了我不确定的:(当方法内部计数正确时,即服务运行正常。 问题答案: 那是因为调用是异步的。 如果您将代码编辑为以下内容: 然后,当您调用它时:

  • 我有一个函数,它调用一些服务并返回响应。如果响应为FALSE,它将等待1秒再次询问服务(然后可能返回TRUE)。 如何调用我的函数“checkService()”一次,并获得真正的值?(第一次或第二次尝试,由函数决定)我在函数内设置了RET值,但函数总是返回第一次RET,因为setTimeout是异步的。 换句话说,我需要一些“睡眠”技巧,或者任何解决方案(也可能是jQuery)。

  • 我的Go函数预计会返回一个值,但在调用库函数时可能会出现恐慌。我可以使用在延迟调用中捕获它,但是在这种情况下如何返回值呢?