我有一个计算不同情况下字段值的请求。
请求如下:
SELECT SUM(CASE WHEN Reliquat_id = 1 THEN Poids END) AS NbrARRNP,
SUM(CASE WHEN Reliquat_id = 2 THEN Poids END) AS NbrSTNP,
SUM(CASE WHEN Reliquat_id = 3 THEN Nombre END) AS NbrARR,
SUM(CASE WHEN Reliquat_id = 4 THEN Nombre END) AS ST,
SUM(CASE WHEN Reliquat_id = 5 THEN Nombre END) AS NbrCLASS,
SUM(CASE WHEN Reliquat_id = 6 THEN Nombre END) AS NbrINDEX FROM datas WHERE Chantier_id = 4 AND main_id =1;
如果案例中没有记录,有时我会遇到问题。返回值为空。
- 例如:如果在 Reliquat_id = 2 的情况下没有记录,我得到 null 而不是零。
我在 StackOverflow 中看到另一个有趣的问题:
How do I get SUM function in MySQL to return '0' if no values are found?
我尝试根据我的要求使用这些函数,但我不明白适用于我的情况的语法。
你有想法吗?
谢谢
最佳答案
只需添加ELSE 0
:
SELECT SUM(CASE WHEN Reliquat_id = 1 THEN Poids ELSE 0 END) AS NbrARRNP,
SUM(CASE WHEN Reliquat_id = 2 THEN Poids ELSE 0 END) AS NbrSTNP,
SUM(CASE WHEN Reliquat_id = 3 THEN Nombre ELSE 0 END) AS NbrARR,
SUM(CASE WHEN Reliquat_id = 4 THEN Nombre ELSE 0 END) AS ST,
SUM(CASE WHEN Reliquat_id = 5 THEN Nombre ELSE 0 END) AS NbrCLASS,
SUM(CASE WHEN Reliquat_id = 6 THEN Nombre ELSE 0 END) AS NbrINDEX
FROM datas
WHERE Chantier_id = 4 AND main_id = 1;
注意:如果根本没有行匹配 WHERE
条件,这仍然会返回包含所有 NULL
值的行。
关于mysql - 如果在MYSQL中找不到值,如何将SUM(CASE WHEN)函数的返回值设置为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529772/