Дерекқорда 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».