我正在尝试计算或计数具有一定数量的日期差异的行数,但我不确定如何
select count(case when date_diff('day', min_time, max_time) <= 7 then 1 else null end) / count(*)
from table
,但它似乎不做的伎俩,不确定是否有一个更好的方式来实现这一点,谢谢!
编辑:正如@shawnt00在对这个问题的评论中提到的那样,问题很可能是您正在除以整数(也导致整数,即在这种情况下为0或1)。添加一个* 1.0
应该可以解决这个问题(如果你愿意,也可以将其强制转换为float8)。
您可以使用FILTER
子句:
select count(*) filter (where date_diff('day', min_time, max_time) <= 7) * 1.0 / count(*)
from table
虽然它看起来像你在计算平均值,也许像这样的东西将是最简单的:
select avg(case when date_diff('day', min_time, max_time) <= 7 then 1.0 else 0.0 end)
from table
为什么不使用count(*)
与where子句来选择行?