получение нескольких записей во втором запросе - PullRequest
0 голосов
/ 22 апреля 2020
select max(salary)
from employees 
group by department_id

select * from employees
where salary in (select max(salary)
                 from employees
                 group by department_id  )

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Вы можете использовать analytical function следующим образом:

Связи включены:

select * from
(select e.*, dense_rank() over (partition by e.department_id order by e.salary) as rn 
from employees e)
where rn = 1

Связи исключены (одна случайная запись при связях)

select * from
(select e.*, row_number() over (partition by e.department_id order by e.salary) as rn 
from employees e)
where rn = 1
0 голосов
/ 22 апреля 2020

Я думаю, что вы ищете коррелированный подзапрос:

select e.*
from employees e
where e.salary = (
    select max(e1.salary)
    from employees e1
    where e1.department_id = e.department_id
)

Этот запрос дает вам сотрудников, которые имеют наибольшую зарплату в своем отделе (включая связи).

Для повышения производительности, рассмотрим индекс на employees(department_id, salary).

...