我需要编写一个查询,返回满足特定条件的所有值的总和,但如果没有找到行,查询需要返回0,而不是null.例如:
tab
+---------------+-----+
| descr | num |
+---------------+-----+
| hello there | 5 |
| hi there | 10 |
| hello | 10 |
| hi there! | 15 |
+---------------+-----+
Run Code Online (Sandbox Code Playgroud)
这个查询:
SELECT sum(num) AS val FROM tab WHERE descr LIKE "%hello%";
Run Code Online (Sandbox Code Playgroud)
应该而且确实会回来15
.然而:
SELECT sum(num) AS val FROM tab WHERE descr LIKE "%greetings%";
Run Code Online (Sandbox Code Playgroud)
应该返回0
,但确实返回null
.
有人可以解释一下这是否可能?
Mik*_*sen 73
怎么样:
SELECT COALESCE(sum(num), 0) AS val FROM tab WHERE descr LIKE "%greetings%";
Run Code Online (Sandbox Code Playgroud)
该COALESCE函数基本上说"返回的第一个参数,除非它是空在这种情况下返回第二个参数" -这是在这些情况下,会非常方便.
ses*_*ser 10
SELECT SUM(IFNULL(num, 0)) as val FROM tab WHERE descr LIKE "%greetings%";
Run Code Online (Sandbox Code Playgroud)
当然,这假设您的num
字段可以为空并且没有默认值.另一种可能的解决方案是0
为num字段设置一个默认值,它应该解决你遇到的问题.
最短的方法是:
SELECT IFNULL(SUM(num), 0) as val FROM tab WHERE descr LIKE "%greetings%";
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39619 次 |
最近记录: |