向 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
我在 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