Postgresql процент записей, созданных за определенный промежуток времени - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть таблица, которая содержит поле 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:00 и 2019-04-30 00:00:00. За этот промежуток времени у меня есть две записи first и third, поэтому результат должен быть 50%. Я сталкивался с предложением OVER(), но либо не понимаю, как его использовать, либо это не то, что мне нужно.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Вы можете использовать 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 голос
/ 29 апреля 2019

Я бы просто использовал avg():

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

Вы можете умножить на 100, если хотите значение от 0 до 1.

Я настоятельно не рекомендую вам использовать 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'.

...