sql - 检索各部门薪水较高的员工姓名
问题描述
我有三个不同的表,如 SQL Server 的部门、员工和薪水。
它的结构
CREATE TABLE department (DeptId INT,DeptName Varchar(100))
INSERT INTO department VALUES (1,'Accounts');
INSERT INTO department VALUES (2,'Package');
CREATE TABLE employee (EmpId INT,DeptId INT,EmpName varchar(20))
INSERT INTO employee VALUES (1,1,'Sachin');
INSERT INTO employee VALUES (2,1,'Vikas');
INSERT INTO employee VALUES (3,2,'Sikha');
INSERT INTO employee VALUES (4,2,'Disha');
CREATE TABLE salary(EmpId INT,Sal int)
INSERT INTO salary VALUES (1,400);
INSERT INTO salary VALUES (2,700);
INSERT INTO salary VALUES (3,700);
INSERT INTO salary VALUES (4,900);
结果将是:
DepName | EmpName
-----------------
Accounts | Vikas
Package | Disha
请帮助我,我需要一个查询来找到所需的结果。
我已尝试以下查询,但无法获取 EmpName。
select DeptName, max(Sal) as Salary from
(select dep.DeptName, emp.EmpName, sal.Sal from salary as sal
inner join employee emp on emp.EmpId = sal.EmpId
inner join department dep on dep.DeptId = emp.DeptId) as tbls
group by DeptName
解决方案
可以RANK()
用来查询工资。
这是示例:
select DeptName
,EmpName
from
(
select DeptName
,EmpName
,rank() over (partition by d.deptid order by sal desc) as ranknum
from employee as e
inner join salary as s
on e.EmpId=s.EmpId
left join department as d
on d.DeptId = e.DeptId
) as ranktable
where ranknum = 1
推荐阅读
- flutter - 是否可以使用颤振实时跟踪所覆盖的公里数?
- c# - 使用 DigitalPersona 5300 Reader 进行指纹采集。如何在 Windows 服务中检测设备?
- c - 将数据添加到函数内部的结构,但外部值为空
- c# - Lidgren 客户加入编辑器但未构建
- python - 我不知道为什么不是我所有重叠的数字都没有被附加到列表中
- swagger - AWS API Gateway 将 OAS3 路径和查询参数类型更改为字符串
- c++ - 由 opencl 处理返回的 C++ 中的表面模糊算法 (0xC0000005)
- c++ - 我们可以使用最小线段树来回答一定范围内的数组中没有小于k的元素吗?
- python - Python如何将数据框导出到xlsx中的两个选项卡
- microservices - 使用微服务架构的应用程序中的优雅降级