SQL рецепт (5 способов решения)

 

Вывести список сотрудников, получающих максимальную заработную плату в своем отделе.

-- 1 способ
select a.*
from EMP a
where a.sal = (select max(sal) from EMP b where b.deptno = a.deptno)

-- 2 способ
select e.* from EMP e
join (select deptno, max(sal) as max_salary
from EMP e2
group by deptno) d
on d.deptno=e.deptno
where e.sal = d.max_salary

-- 3 способ
select *
from (select t.*, max(sal) over(partition by t.deptno) as max_salary
from EMP t) tt
where tt.sal = tt.max_salary

-- 4 способ
select t.*
from EMP t
where sal not in (select a.sal
from EMP a, EMP b
where a.sal < b.sal
and b.deptno = t.deptno)

-- 5 способ
select t.*
from EMP t
where t.sal >= all (select sal from EMP where deptno = t.deptno)