Нужно сгруппировать события по календарному месяцу в PostgreSQL, чтобы все дни одного месяца попали в одну группу. Какой подход правильный?

AНаписать GROUP BY YEAR(event_time), MONTH(event_time) — стандартный синтаксис для всех СУБД
BИспользовать GROUP BY EXTRACT(month FROM event_time) — извлекает номер месяца из даты
CНаписать GROUP BY DATE_TRUNC('month', event_time) — усекает временную метку до начала месяца
DПрименить GROUP BY CAST(event_time AS DATE) — обрезает время, оставляя только дату
Правильный ответ. DATE_TRUNC('month', ts) усекает метку до YYYY-MM-01 00:00:00 — все дни одного месяца принимают одно значение и попадают в одну группу.

Разбор

DATE_TRUNC(unit, timestamp) возвращает метку времени, усечённую до указанной единицы. DATE_TRUNC('month', ts) превращает любую дату месяца в YYYY-MM-01 00:00:00. EXTRACT(month FROM ts) возвращает только номер месяца 1–12 и смешивает разные годы — январь 2023 и январь 2024 окажутся в одной группе. CAST(ts AS DATE) группирует по дням, а не месяцам.

Проверь себя · 1/3разбор после ответа
Нужно получить по каждому менеджеру число выполненных и число отменённых заказов в одной строке результата. Какой подход позволяет это сделать?
Тренировать SQL в Telegram

Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»