wrile sql query using group

tables Employee, Department

Нужно получить e.name, e.salary c максимальной зарплатой для каждого департамента, используя в запросе команды 'group' и может быть 'having'

есть рабочий запрос, но как написать альтернативный запрос не знаю

select e.name, e.salary  from employee e 
where salary = (select max(salary) from employee e2 
                where e.department_id = e2.department_id)

Ответы (1 шт):

Автор решения: Дмитрий Бесшапошников

Я бы сделал так:

select
  e.name
  ,e.salary
from employee e
where e.salary in
  (select max(salary) as s
   from employee e
   group by e.department_id)

но если уж так надо приплести having, то можно построить что-то вроде этого, но зачем это нужно, я не понимаю

select
  e.name
  ,e.salary
from employee e
join (
  select 
    max(e.salary) as salary 
    , e.department_id
  from employee e
  group by e.department_id
  having max(e.salary) in 
  (select max(salary) as s
   from employee e
   group by e.department_id)
) s 
on s.salary = e.salary

тестировал тут: sqlfiddle.com

→ Ссылка