在特定时间间隔内创建的Postgresql记录的百分比

时间:2019-04-29 10:15:40

标签: sql postgresql percentage

我有一个包含字段created_at的表。我想根据在指定时间间隔内创建的总数计算记录的百分比。假设我具有以下结构:

| name   | created_at                   |
----------------------------------------
| first  | "2019-04-29 09:30:07.441717" |
| second | "2019-04-30 09:30:07.441717" |
| third  | "2019-04-28 09:30:07.441717" |
| fourth | "2019-04-27 09:30:07.441717" |

因此,我想计算在2019-04-28 00:00:002019-04-30 00:00:00之间的时间间隔内创建的记录所占的百分比。在此时间间隔中,我有两条记录firstthird,因此结果应为50%。我遇到了OVER()子句,但是我不知道如何使用它,或者这不是我所需要的。

2 个答案:

答案 0 :(得分:2)

您可以使用CASE

 select 100 * count(case 
      when created_at between '2019-04-28 00:00:00' and '2019-04-30 00:00:00' 
      then 1 
      end) / count(*)
 from your_table

答案 1 :(得分:1)

我只会使用avg()

select avg( (created_at between '2019-04-28' and '2019-04-30')::int )
 from your_table

如果您想要一个介于0和1之间的值,则可以乘以100。

强烈建议您不要将between与日期/时间值一起使用。时间部分可能无法按照您想要的方式运行。您在问题中使用了“之间”,但我保留了。但是,我建议:

select avg( (created_at >= '2019-04-28' and 
             created_at < '2019-04-30'
            )::int
          )
 from your_table;

尚不清楚您要使用< '2019-04-30'<= '2019-04-30'还是'2019-05-01'