Самая высокая зарплата в каждом отделе - PullRequest
21 голосов
/ 12 декабря 2011

У меня есть таблица EmpDetails:

DeptID      EmpName   Salary
Engg        Sam       1000
Engg        Smith     2000
HR          Denis     1500
HR          Danny     3000
IT          David     2000
IT          John      3000

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

Ответы [ 29 ]

30 голосов
/ 12 декабря 2011

Коротко, как вопрос:

SELECT DeptID, MAX(Salary) FROM EmpDetails GROUP BY DeptID
21 голосов
/ 12 декабря 2011

Предполагается, что SQL Server 2005 +

WITH cteRowNum AS (
    SELECT DeptID, EmpName, Salary,
           DENSE_RANK() OVER(PARTITION BY DeptID ORDER BY Salary DESC) AS RowNum
        FROM EmpDetails
)
SELECT DeptID, EmpName, Salary
    FROM cteRowNum
    WHERE RowNum = 1;
5 голосов
/ 09 марта 2015
Select empname,empid,Sal,DeptName from 
(Select e.empname,e.empid,Max(S.Salary) Sal,D.DeptName, ROW_NUMBER() Over(partition by D.DeptName order by s.salary desc) Rownum
from emp e inner join Sal S
on e.empid=s.empid 
inner join Dept d on e.Deptid=d.Deptid
group by e.empname,e.empid,D.DeptName,s.Salary
) x where Rownum = 1
3 голосов
/ 12 февраля 2015

Если вы хотите показать другие параметры вместе с DeptId и Salary, например EmpName, EmpId

SELECT 
        EmpID 
      , Name, 
      , Salary
      , DeptId 
   FROM Employee 
   where 
     (DeptId,Salary) 
     in 
     (select DeptId, max(salary) from Employee group by DeptId)
3 голосов
/ 23 января 2014
SELECT empName,empDept,EmpSalary
FROM Employee
WHERE empSalary IN
  (SELECT max(empSalary) AS salary
   From Employee
   GROUP BY EmpDept)
3 голосов
/ 05 мая 2016

Используйте приведенный ниже вопрос:

select employee_name,salary,department_id from emp where salary in(select max(salary) from emp group by department_id);
2 голосов
/ 31 июля 2014

Это будет работать, если отдел, зарплата и имя сотрудника находятся в одной таблице.

select ed.emp_name, ed.salary, ed.dept from
(select max(salary) maxSal, dept from emp_dept group by dept) maxsaldept
inner join emp_dept ed
on ed.dept = maxsaldept.dept and ed.salary = maxsaldept.maxSal

Есть ли лучшее решение, чем это?

2 голосов
/ 23 апреля 2014
SELECT Employee_ID
     , First_name
     , last_name
     , department_id
     , Salary 
FROM (SELECT Employee_ID
           , First_name
           , last_name
           , department_id
           , Salary
           , MAX(salary) OVER (PARTITION BY department_id) dept_max_sal
      FROM EMPLOYEES) AS Emp
WHERE salary = dept_max_sal;
2 голосов
/ 08 марта 2014
select a.*
 from EmpDetails a
 inner join 
 (
 select DeptID,max(Salary) as Salary
 from EmpDetails group by DeptID  
 )b 
on a.DeptID = b.DeptID and a.Salary = b.Salary
2 голосов
/ 29 августа 2013
WITH cteRowNum AS (
    SELECT DeptID, EmpName, Salary,
           ROW_NUMBER() OVER(PARTITION BY DeptID ORDER BY Salary DESC) AS RowNum
        FROM EmpDetails
)
SELECT DeptID, EmpName, Salary,Rownum
    FROM cteRowNum
    WHERE RowNum in(1,2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...