Есть таблица orders(created_at, amount), где created_at имеет тип timestamp. Как посчитать выручку по месяцам?

ASELECT DATE_TRUNC('month', created_at) AS m, SUM(amount) FROM orders GROUP BY DATE_TRUNC('month', created_at);
BSELECT DATE_TRUNC('month', created_at) AS m, amount FROM orders GROUP BY DATE_TRUNC('month', created_at);
CSELECT DATE_TRUNC('month', created_at) AS m, SUM(amount) FROM orders ORDER BY DATE_TRUNC('month', created_at);
DSELECT DATE_TRUNC('day', created_at) AS m, SUM(amount) FROM orders GROUP BY DATE_TRUNC('month', created_at);
Правильный ответ. Для метрик по периодам вычислите бакет через DATE_TRUNC и агрегируйте с GROUP BY по этому бакету.

Разбор

Чтобы получить выручку по месяцам, сформируйте месячный бакет DATE_TRUNC('month', created_at) и посчитайте SUM(amount). В GROUP BY нужно повторить то же выражение, что используется для бакета. Без агрегата SUM будет просто список заказов, а с днём в SELECT и месяцем в GROUP BY запрос вернёт ошибку или некорректный результат.

Проверь себя · 1/3разбор после ответа
Нужно построить график регистраций по часам из таблицы пользователей со столбцом created_at типа timestamp. Какой бакет лучше использовать?
Тренировать SQL в Telegram

Ещё вопросы по теме «Даты и время»