日期不同的情况



我正在尝试计算或计数具有一定数量的日期差异的行数,但我不确定如何

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子句来选择行?

相关内容

最新更新