Сводный отчет продаж по отделам и месяцам

Сгруппируйте продажи по 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).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее