Нужно сгруппировать события по календарному месяцу в 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разбор после ответа
Нужно получить по каждому менеджеру число выполненных и число отменённых заказов в одной строке результата. Какой подход позволяет это сделать?
Ещё вопросы по теме «Агрегация, GROUP BY и HAVING»
- Что делает оператор `DISTINCT`?
- Что делает `HAVING`?
- Есть таблица `orders(user_id, amount)`. Какой запрос посчитает сумму всех заказов по каждому пользователю?
- Нужно посчитать сумму оплаченных заказов по каждому пользователю. В таблице `orders` есть поля `user_id`, `amount`, `status`. Какой запрос корректен и наиболее эффективен?
- В таблице `users` есть колонка `middle_name`, в которой часто хранится `NULL`. Что вернёт выражение `COUNT(middle_name)`?
- Все вопросы по «Агрегация, GROUP BY и HAVING» →