Сгруппируйте строки по менеджеру, вычислите SUM и отфильтруйте группы через HAVING; WHERE применяется к исходным строкам до агрегации.
Есть таблица ManagerSales с колонками «ФИО» и «Стоимость», содержащая около миллиона строк продаж за месяц. Как SQL-запросом получить менеджеров, чья суммарная сумма продаж за месяц превышает 1 000 000 рублей? Почему для условия по сумме используется HAVING, а не WHERE?
Сгруппируйте строки по менеджеру, вычислите SUM и отфильтруйте группы через HAVING; WHERE применяется к исходным строкам до агрегации.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сгруппируйте строки по менеджеру, вычислите SUM и отфильтруйте группы через HAVING; WHERE применяется к исходным строкам до агрегации.
Если таблица содержит именно продажи нужного месяца:
SELECT "ФИО", SUM("Стоимость") AS total
FROM "ManagerSales"
GROUP BY "ФИО"
HAVING SUM("Стоимость") > 1000000;
Синтаксис кавычек приведён для PostgreSQL. При наличии разных месяцев сначала нужен WHERE по дате. В рабочей схеме лучше группировать по manager_id: одинаковые ФИО могут принадлежать разным людям.