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