Сумма записей (count) по разным датам
Дана таблица 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
Но если добавить в таблицу разное время, то подсчитать нормально не получится.
Ответы (1 шт):
Можно преобразовать дату в некоторую строку с помощью функции 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