向 select ENAME(员工姓名)写一个查询,谁从他们的部门获得最高薪水

Write a query to select ENAME(Employee names) who get the highest salaries from their DEPT

我在 MSSQLServer 中创建了以下 table 并插入了更多行。

(
     EID int,
     ENAME nvarchar(50),
     DEPT nvarchar(50),
     Salary int
)
GO

Insert into Emp11 values (1, 'A','Dev', 60000)
Insert into Emp11 values (2, 'B','Dev', 60000)
Insert into Emp11 values (3, 'C','Support', 60000)
Insert into Emp11 values (4, 'D','Support', 30000)
Insert into Emp11 values (5, 'E','Reporting', 30000)
Insert into Emp11 values (6, 'F','Reporting', 70000)
Insert into Emp11 values (7, 'G','Reporting', 70000)
Insert into Emp11 values (8, 'H','QA', 70000)
Insert into Emp11 values (9, 'I','QA', 90000)
Insert into Emp11 values (10,'J','QA', 90000

我是运行这个查询-

select ename, salary, DEPT from(
    select *
        , row_number() over (partition by DEPT order by salary desc) as rn
    from EMP11
)a where rn=1

--Result->
ename  salary   DEPT
A      60000    Dev
I      90000    QA
F      70000    Reporting
C      60000    Support

如果他们的薪水与部门的最高薪水相同,我想获得超过 1 个 ENAME,即:

ENAME   salary  DEPT
A   60000   Dev
B   60000   Dev
I   90000   QA
J   90000   QA
F   70000   Reporting
G   70000   Reporting
C   60000   Support

使用rank();与保证每个数字的唯一性的 row_number() 相反,它将相同的排名分配给具有相同值的行:

select ename, salary, dept
from (
    select *, rank() over (partition by dept order by salary desc) as rn
    from emp11
) a 
where rn = 1