В таблице events(user_id, created_at) поле created_at имеет тип отметки времени с долями секунд. Как корректно посчитать количество событий по дням?
A
SELECT created_at, COUNT(*) FROM events GROUP BY created_at: группировка по точной метке времениB
SELECT DATE_TRUNC('day', created_at) AS day, COUNT(*) FROM events GROUP BY DATE_TRUNC('day', created_at)C
SELECT DATE_TRUNC('day', created_at) AS day, COUNT(*) FROM events: запрос без GROUP BY по выражению дняD
SELECT DATE_TRUNC('month', created_at) AS day, COUNT(*) FROM events GROUP BY DATE_TRUNC('month', created_at)Правильный ответ.
DATE_TRUNC('day', ...) обрезает время до начала дня и подходит для группировки по дням.Разбор
Для бакетирования по дням используйте DATE_TRUNC('day', created_at) и группируйте по этому же выражению. Группировка по самому created_at даст отдельную группу на каждую уникальную метку времени. Без GROUP BY по выражению дня запрос вернёт ошибку или сложит все события в одну строку. Группировка по месяцу — это уже другое разрешение, не дни.
Проверь себя · 1/3разбор после ответа
Колонка
created_at типа timestamp. Какое утверждение про created_at::date и DATE_TRUNC('day', created_at) верно?Ещё вопросы по теме «Даты и время»
- Есть таблица `orders(created_at, amount)`, где `created_at` имеет тип `timestamp`. Как посчитать выручку по месяцам?
- В таблице `events(created_at)` нужно выбрать события за последние 7 дней с точностью до текущего момента (включая сегодняшние, ещё не завершённые сутки). Какое условие в `WHERE` корректнее?
- Как получить начало текущей недели (недельный бакет) по текущей дате в PostgreSQL?
- Колонка `created_at` имеет тип `timestamp`. Какой тип данных вернёт `DATE_TRUNC('day', created_at)`?
- В таблице `events(user_id, created_at)` колонка `created_at` типа `timestamptz` (события записаны в UTC). Нужно посчитать DAU по дням в часовом поясе Москвы и не зависеть от часового пояса сессии. Какой бакет правильный?
- Все вопросы по «Даты и время» →