为什么count(case date)还计算空情况?

时间:2018-07-12 10:08:52

标签: sql postgresql

COUNT(studentuntil) AS CountNow,
COUNT(case when studentuntil > '2018-6-1' then 1 else 0 end) as Testdate

当我这样做时,结果是

CountNow 15

测试日期60

因此,当我检查CountNow时,我只有15条记录,这意味着Testdate应该具有15条或更少的记录,但是它也包含空条目。如何停止包含空值的

我也尝试过

COUNT(case when studentuntil > '2018-6-1' and is not null then 1 else 0 end) as testdate

也没用

1 个答案:

答案 0 :(得分:4)

如果您使用CASE并用不可为空的值填充ELSE部分,则将被计数。

您可以跳过ELSE部分:

COUNT(case when studentuntil > '2018-6-1' then 1 end) as Testdate

或将COUNT更改为SUM

SUM(case when studentuntil > '2018-6-1' then 1 ELSE 0 end) as Testdate

我认为最好的方法是

COUNT(*) FILTER(WHERE studentuntil > '2018-6-1')