SELECT wilayah,nilai,t_rkpd,tahun,periode
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'
当我查询这段代码时,结果是这样的table我尝试计数nilai
是否小于或大于t_rkpd
,使用以下代码:
SELECT COUNT(CASE WHEN nilai > t_rkpd THEN 1 END) AS tercapai
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'
SELECT COUNT(CASE WHEN nilai < t_rkpd THEN 1 END) AS tidak_tercapai
FROM nilai_indikator
INNER JOIN provinsi ON nilai_indikator.wilayah=provinsi.id
WHERE tahun='2022' AND periode='08' AND id_indikator='6'
但当nilai
大于t_rkpd
时,两者的结果都是0,应该是34。为什么会这样
3条答案
按热度按时间h7appiyu1#
使用SUM而不是Count尝试相同的代码,并让我知道它是否有效。
你需要按某个列进行分组,因为有一个聚合。如果有帮助的话一定要告诉我
xiozqbni2#
NULL表示0。你只需要加上一个条件。
ctrmrzij3#
NULL表示“未知值”。所以,如果你比较nilai和t_rkpd,其中一个值是NULL,那么答案是“unknown”。
你有
COUNT(CASE WHEN nilai > t_rkpd THEN 1 END)
。当表达式nilai > t_rkpd
为true时,THEN
部分被执行。表达式中没有ELSE
,因此DBMS默认为ELSE NULL
。这部分在nilai > t_rkpd
不为true时执行,即false或unknown。这意味着,当nilai或t_rkpd为null时,表达式结果为null,因此
COUNT
忽略此行。在下面的查询中,我们考虑所有行和所有比较结果: