Как получить самый высокооплачиваемый ряд сотрудников - PullRequest
4 голосов
/ 31 августа 2011

Таблица состоит из имени сотрудника, адреса, телефона, отдела, зарплаты:

Как получить строку с самым высокооплачиваемым сотрудником из каждого отдела?

Я пытался с

select dept, max(salary) from employee group by dept

но он дает только два столбца. Но я хочу выделить целый ряд. Как это сделать?

Как добавить еще столбцы к результату?

(я использую SQL Server 2008)

Ответы [ 6 ]

10 голосов
/ 31 августа 2011

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

select e.*
from employee e
inner join (select dept, max(salary) ms from employee group by dept) m
  on e.dept = m.dept and e.salary = m.ms
5 голосов
/ 31 августа 2011
SELECT name,
       address,
       phone,
       department,
       salary,
       dept
FROM   (SELECT name,
               address,
               phone,
               department,
               salary,
               dept,
               row_number() OVER(PARTITION BY dept ORDER BY salary DESC) AS rn
        FROM   employee) AS e
WHERE  e.rn = 1  

Использование row_number () даст вам одну строку, если есть связь для самой высокой зарплаты.Если вы хотите получить все самые высокие зарплаты для каждого отдела, используйте вместо этого rank ().

SELECT name,
       address,
       phone,
       department,
       salary,
       dept
FROM   (SELECT name,
               address,
               phone,
               department,
               salary,
               dept,
               rank() OVER(PARTITION BY dept ORDER BY salary DESC) AS rn
        FROM   employee) AS e
WHERE  e.rn = 1
3 голосов
/ 01 сентября 2011
with cte as (
  select *, rank() over (partition by dept order by salary desc) as [r]
  from employees
)
select * from cte where [r] = 1;
2 голосов
/ 31 августа 2011

Как то так?

select * from employee where salary = (select max(salary) from employee)
1 голос
/ 13 марта 2017
select * from employee 
where salary in
(select  max(salary) from employee group by dept);
0 голосов
/ 19 октября 2017

Если в такой ситуации у вас есть данные о сотруднике и отдел в одной таблице, и вы должны найти наиболее высокооплачиваемого сотрудника из каждого отдела, как указано ниже

EmployeeId  EmployeeName    Department     Salary
1            Neeraj         Dot Net        45000
2            Ankit          Java           5000
3            Akshay         Java           6000
4            Ramesh         Dot Net        7600
5            Vikas          Java           4000
7            Neha           Php            8500
8            Shivika        Php            4500
9            Tarun          Dot Net        9500

Тогда вы можете решить эту проблему, используя следующие решения

Раствор - 1

SELECT t.EmployeeName,t.Department,t.Salary 
FROM(SELECT MAX(Salary) AS TotalSalary,Department FROM Employee GROUP BY Department) 
AS TempNew Inner Join Employee t ON TempNew.Department=t.Department  
and TempNew.TotalSalary=t.Salary 
ORDER BY t.Department ASC

Раствор -2

;WITH EmployeeDetails AS (
SELECT EmployeeName, Department, DENSE_RANK() OVER(PARTITION BY Department 
ORDER BY Salary DESC) AS SalaryRank, Salary FROM Employee )
SELECT EmployeeName, Department, Salary FROM EmployeeDetails WHERE SalaryRank=1

OUTPUT

EmployeeName    Department  Salary
Neeraj           Dot Net    45000
Akshay           Java       6000
Neha             Php        8500
...