如何设置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而不是零
谢谢只需添加
其他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