Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置SUM(CASE WHEN)函数';如果在MYSQL中找不到值,是否返回0?_Mysql_Sql - Fatal编程技术网

如何设置SUM(CASE WHEN)函数';如果在MYSQL中找不到值,是否返回0?

如何设置SUM(CASE WHEN)函数';如果在MYSQL中找不到值,是否返回0?,mysql,sql,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,

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

请求如下:

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中看到了另一个有趣的问题:

我试图使用这些函数来满足我的请求,但我不理解在我的案例中应用的语法

你有主意吗


谢谢

只需添加
其他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
值的行。

只需添加
其他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
值的行。

使用
IFNULL()
COALESCE()
函数

IFNULL(POID,0)
合并(POID,0)
使用
IFNULL()
合并()函数

IFNULL(POID,0)
合并(POID,0)
请尝试此操作

SELECT IFNULL(SUM(CASE WHEN Reliquat_id = 1 THEN Poids ELSE 0 END),0) AS NbrARRNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 2 THEN Poids ELSE 0 END),0) AS NbrSTNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 3 THEN Nombre ELSE 0 END),0) AS NbrARR,
       IFNULL(SUM(CASE WHEN Reliquat_id = 4 THEN Nombre ELSE 0 END),0) AS ST,
       IFNULL(SUM(CASE WHEN Reliquat_id = 5 THEN Nombre ELSE 0 END),0) AS NbrCLASS,
       IFNULL(SUM(CASE WHEN Reliquat_id = 6 THEN Nombre ELSE 0 END),0) AS NbrINDEX
FROM datas
WHERE Chantier_id = 4 AND main_id = 1;
请试试这个

SELECT IFNULL(SUM(CASE WHEN Reliquat_id = 1 THEN Poids ELSE 0 END),0) AS NbrARRNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 2 THEN Poids ELSE 0 END),0) AS NbrSTNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 3 THEN Nombre ELSE 0 END),0) AS NbrARR,
       IFNULL(SUM(CASE WHEN Reliquat_id = 4 THEN Nombre ELSE 0 END),0) AS ST,
       IFNULL(SUM(CASE WHEN Reliquat_id = 5 THEN Nombre ELSE 0 END),0) AS NbrCLASS,
       IFNULL(SUM(CASE WHEN Reliquat_id = 6 THEN Nombre ELSE 0 END),0) AS NbrINDEX
FROM datas
WHERE Chantier_id = 4 AND main_id = 1;
对于案例(Reliquat_id=5和Reliquat_id=6)以及其他案例,请使用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   
对于案例(Reliquat_id=5和Reliquat_id=6)以及其他案例,请使用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   

最后,这里是最后一个请求:

SELECT IFNULL(SUM(CASE WHEN Reliquat_id = 1 THEN Poids END),0) AS NbrARRNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 2 THEN Poids END),0) AS NbrSTNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 3 THEN Nombre END),0) AS NbrARR,
       IFNULL(SUM(CASE WHEN Reliquat_id = 4 THEN Nombre END),0) AS ST,
       IFNULL(SUM(CASE WHEN Reliquat_id = 5 THEN Nombre END),0) AS NbrCLASS,
       IFNULL(SUM(CASE WHEN Reliquat_id = 6 THEN Nombre END),0) AS NbrINDEX
FROM datas
WHERE Chantier_id = 4 AND main_id = 1;

我发现这是解决该问题的最佳请求,因为如果数据库中没有记录,“ELSE 0”不起作用,返回0。现在使用IFNULL,即使没有记录,它也总是返回0。

最后,这里是最后一个请求:

SELECT IFNULL(SUM(CASE WHEN Reliquat_id = 1 THEN Poids END),0) AS NbrARRNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 2 THEN Poids END),0) AS NbrSTNP,
       IFNULL(SUM(CASE WHEN Reliquat_id = 3 THEN Nombre END),0) AS NbrARR,
       IFNULL(SUM(CASE WHEN Reliquat_id = 4 THEN Nombre END),0) AS ST,
       IFNULL(SUM(CASE WHEN Reliquat_id = 5 THEN Nombre END),0) AS NbrCLASS,
       IFNULL(SUM(CASE WHEN Reliquat_id = 6 THEN Nombre END),0) AS NbrINDEX
FROM datas
WHERE Chantier_id = 4 AND main_id = 1;

我发现这是解决该问题的最佳请求,因为如果数据库中没有记录,“ELSE 0”不起作用,返回0。现在使用IFNULL,即使没有记录,它也总是返回0。

您可以在SUM中添加else(当Reliquat\u id=1时,则Poids else 0 END)您可以在SUM中添加else(当Reliquat\u id=1时,则Poids else 0 END),我刚刚尝试过,它告诉我:“调用本机函数‘ISNULL’时参数计数不正确”如果ELSE仍然存在,为什么要将ISNULL放在那里?“ELSE”如果找到记录并重新激活id 1,那么ISNULL在没有找到记录时工作ISNULL用于sql,您必须使用ifNull。最后,它与ELSE一起工作,而没有ELSE感谢您的解决方案。我刚刚尝试过,它告诉我:“调用本机函数‘ISNULL’时参数计数不正确”如果ELSE仍然存在,为什么要将ISNULL放在那里?“ELSE”如果找到记录并且Reliquat_id 1,那么ISNULL工作;如果没有找到记录,那么ISNULL工作。ISNULL用于sql,您必须使用ifNull。最后,它与ELSE一起工作,而不与ELSE一起工作。谢谢您的解决方案。查询正在工作,但返回时出现问题。我在第一个请求中得到了5.92 | null | 0 | null | null | null | null,而不是5.92 | null | null | null | null,无需修改。用else我得到5.92 | 0 | 0 | 0 | 0该查询正在运行,但返回中存在问题。我在第一个请求中得到了5.92 | null | 0 | null | null | null | null,而不是5.92 | null | null | null | null,无需修改。另外我得到5.92 | 0 | 0 | 0 | 0