В базе данных есть таблица Employees(id, name, dept, salary):
1, Алия, IT, 400000
2, Бауыржан, IT, 350000
3, Мадина, HR, 300000
4, Ержан, HR, 280000
5, Динара, Sales, 320000
6, Талгат, Sales, 310000
7, Асель, IT, 450000
8, Нурлан, Sales, 290000
Выполняется запрос:
SELECT dept, COUNT(*) FROM Employees WHERE salary > 290000 GROUP BY dept HAVING AVG(salary) > 310000 ORDER BY COUNT(*) DESC, dept;
Какой результат (строки в порядке вывода, в виде пар «отдел число») вернёт запрос?
Показать ответ и разборСкрыть ответ и разбор
Верный ответ
- DIT 3; Sales 2
Разбор
1) WHERE отбирает записи до группировки: salary > 290000 исключает Ержана (280000) и Нурлана (290000, строгое неравенство). Остаются: IT — 400000, 350000, 450000; HR — 300000; Sales — 320000, 310000.
2) GROUP BY dept даёт три группы: IT (3 записи), HR (1), Sales (2).
3) HAVING фильтрует группы по среднему: IT — 400000 > 310000, подходит; HR — 300000, не подходит; Sales — (320000 + 310000) / 2 = 315000 > 310000, подходит.
4) ORDER BY COUNT(*) DESC сортирует по убыванию числа записей: сначала IT (3), затем Sales (2).
Итог: «IT 3; Sales 2».