mysql - 如果在MYSQL中找不到值,如何将SUM(CASE WHEN)函数的返回值设置为0?

标签 mysql sql

我有一个计算不同情况下字段值的请求。

请求如下:

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/

相关文章:

mysql - 在 CI 中获取数据库列作为字符串

SQL Server 2014 - 列出存储过程中使用的所有函数和子函数

mysql - MS SQL 获取给定日期的总和

mysql - 对于初学者,MySQL 和 PostgreSQL 之间有很大区别吗?

sql - 如何在 postgres 中为单个值输入多行?

mysql - 查找表中唯一出现的值

sql - 在单个 SQL Server 实例中使用多个数据库排序规则会出现哪些问题?

php - 高效评论系统分页查询

mysql - 基于计算的订单记录

mysql - 数据采集​​用什么数据库?