Найти первого сотрудника с самой высокой зарплатой под менеджером - PullRequest
0 голосов
/ 19 июня 2019

В таблице данных о сотрудниках хранятся, как показано ниже

Empno ename  salary manager

1     prasad 100    4
2     durga  200    4
3     ggggg  200    4
4     jjjjj  300    6
5     kkkkk  600    6
6     dddddd 700    7

Мне нужно найти первого сотрудника с самой высокой зарплатой под управлением менеджера.

мой код sql и вывод:

select * from employee where salary in
         (select max(salary) from employee group by manager);

вывод:

Empno ename  salary manager

2     durga  200    4
3     ggggg  200    4
5     kkkkk  600    6
6     dddddd 700    7

Ожидаемый результат должен быть:

2     durga  200    4
5     kkkkk  600    6
6     dddddd 700    7

, поскольку зарплата «200» отображается два раза для двух сотрудников.Мое требование состоит в том, чтобы отображать первого сотрудника с самой высокой зарплатой только под менеджером.

Может кто-нибудь предложить запрос sql для моего ожидаемого результата.Заранее спасибо

Ответы [ 3 ]

1 голос
/ 19 июня 2019

Вы можете использовать функцию окна ROW_NUMBER. Например:

select 
  empno, ename, salary, manager
from (
  select *, 
    row_number() over(partition by manager order by salary desc, ename) as rn
  from employee
) x where rn = 1
1 голос
/ 19 июня 2019

Попробуйте этот запрос:

SELECT ename, manager, MAX(salary) FROM employee GROUP BY manager;

Живой пример:


Редактировать: База данных Oracle

SELECT manager, MAX(salary) FROM employee GROUP BY manager;
0 голосов
/ 19 июня 2019

Используйте коррелированный подзапрос, а не group by:

select e.*
from employee e
where e.salary = (select max(e2.salary)
                  from employee e2
                  where e2.manager = e.manager
                 );

Ваша проблема в том, что максимальная зарплата одного менеджера может быть зарплатой другого человека, но не максимальной зарплатой этого менеджера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...