Сгруппируйте продажи по dept_id и MONTH(date), вычислив SUM(sale_amt) и COUNT(*). Год намеренно не входит в группировку, как указано в условии.
Сводный отчет продаж по отделам и месяцам
Сгруппируйте продажи по dept_id и MONTH(date), вычислив SUM(sale_amt) и COUNT(*). Год намеренно не входит в группировку, как указано в условии.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеется таблица SALES со следующими полями:
- id — уникальный идентификатор записи
- dept_id — номер отдела
- date — дата совершения продажи
- sale_amt — величина продажи
Необходимо сформировать агрегированный отчёт, группируя данные по отделу и месяцу продажи. В результате должны быть отображены:
- dept_id (номер отдела),
- месяц продажи (без учёта года),
- суммарная сумма продаж за месяц,
- количество совершённых продаж.
Для получения номера месяца из даты используйте функцию MONTH(date).
SELECT ...
FROM SALES
GROUP BY ...
Ответ
Сгруппируйте продажи по dept_id и MONTH(date), вычислив SUM(sale_amt) и COUNT(*). Год намеренно не входит в группировку, как указано в условии.
SELECT dept_id,
MONTH(`date`) AS sale_month,
SUM(sale_amt) AS total_sales,
COUNT(*) AS sales_count
FROM SALES
GROUP BY dept_id, MONTH(`date`)
ORDER BY dept_id, sale_month;
Это синтаксис MySQL. Январь разных лет объединится в одну строку отдела. SUM пропускает NULL в sale_amt, а COUNT(*) считает все записи; если NULL недопустим, лучше закрепить ограничение в схеме. Для отчёта по календарным месяцам разных лет понадобился бы дополнительный YEAR(date).