Сумма записей (count) по разным датам

Рейтинг: 0Ответов: 1Опубликовано: 17.01.2023

Дана таблица postgresql:

name date
10 2023-01-15 23:15:17
10 2023-01-15 23:15:17
10 2023-01-19 23:15:17
10 2023-01-20 11:15:17
10 2023-01-21 13:15:17
10 2023-01-21 13:15:17
10 2023-01-21 13:15:17
10 2023-09-15 13:15:17
10 2023-08-15 23:15:17

Используя count можно подсчитать кол-во "name", за определенную дату, например:

select count(name) as name from table1 
where date between '2023-01-15 00:00:00'
and '2023-01-15 23:59:59'

Вывод: 2

Вопрос такой: можно как то одним запросом, подсчитать кол-во name, но за разные даты или месяцы?

Если бы даты и время были одинаковые, то можно было бы просто через group by:

select count(name) as name,date from table1 
where date between '2023-01-15 00:00:00'
and '2023-08-15 23:59:59'
group by date

Но если добавить в таблицу разное время, то подсчитать нормально не получится.

Ответы

▲ 0

Можно преобразовать дату в некоторую строку с помощью функции to_char, и дальше уже группировать по этой строке.

Например, вот так можно посчитать по датам

SELECT COUNT(name), to_char("date", 'YYYY-MM-DD') AS "part"
FROM table1 
GROUP BY part

а вот так по месяцам

SELECT COUNT(name), to_char("date", 'YYYY-MM') AS "part"
FROM table1 
GROUP BY part;

Думаю что логика примерно понятна. Дата преобразуется в строку по некотормоу шаблону, а дальше идет группировка.

Пример рабочих запросов: http://sqlfiddle.com/#!15/1b6869/8