Sql 如何从每个部门检索员工的最高工资
以表Employee为例:Sql 如何从每个部门检索员工的最高工资,sql,sql-server-2008,Sql,Sql Server 2008,以表Employee为例: Department number Employee_id Salary 1 123 2000 1 234 3266 1 657 3265 2 546 2050 2
Department number Employee_id Salary
1 123 2000
1 234 3266
1 657 3265
2 546 2050
2 657 3000
2 121 6000
3 131 6500
3 141 5000
3 151 1050
现在我想从每个部门检索工资最高的员工id。如何为此编写查询?能否使用max语句:
Select departament_number,employee_id,salary
from employee
where salary in (select MAX(salary) from employee group by departament_number)
试试这个
SELECT Dept_Num,EmpID,Salary
from Employee
WHERE Salary IN (Select MAX(Salary) from Employee Group By Dept_Num)
处理这些查询的一个好方法是使用
row\u number()
:
如果您想在有关系时为一个部门获取多行,那么使用
densite\u rank()
或rank()
而不是row\u number()
好吧。。这是在我的采访中被问到的。我不知道尝试的逻辑。在你去那个学校网站之前,请看。这是经典问题的一个变体;请参阅此问题的答案:。像这样的东西会有太多重复的问题。将员工id包含在group by中会为每个员工生成一个结果,而不是为部门生成一个记录。非常感谢!!:)@卡提克。这并非在所有情况下都有效。考虑数据是否具有“1,xxx,151”的值。
select department_number, employee_id, salary
from (select e.*, row_number() over (partition by department order by salary desc) as seqnum
from employee e
) e
where seqnum = 1;