在PieCloudDB中查询各部门薪资位列前三不同薪资的员工
查询PieCloudDB中各部门前三不同薪资的员工
问题背景
现有两张业务表:
- 员工表(
employee):字段包含Id、name、salary、departmentid - 部门表(
department):字段包含id、name
需求为筛选出每个部门内,薪资属于该部门前三档不同薪资的所有员工——若多名员工薪资相同且属于前三档薪资,这类员工全部需要纳入结果。
解决方案SQL
SELECT d.name AS department, e.name AS employee, e.salary FROM ( SELECT *, DENSE_RANK() OVER (PARTITION BY departmentid ORDER BY salary DESC) AS salary_rank FROM employee ) e JOIN department d ON e.departmentid = d.id WHERE e.salary_rank <= 3 ORDER BY d.name, e.salary DESC, e.name;
逻辑说明
DENSE_RANK()窗口函数:按部门分组(PARTITION BY departmentid),对薪资做降序排序,相同薪资会获得相同排名,且排名不会出现跳跃(例如IT部门9000为第1名,两个8500均为第2名,7000为第3名,前三档薪资对应的rank值为1、2、3)。- 表关联:通过员工表的
departmentid关联部门表的id,将部门ID转换为部门名称。 - 结果筛选:保留
salary_rank <= 3的记录,即属于前三档不同薪资的员工。 - 排序规则:最终结果按部门名称、薪资降序、员工名称排序,与预期输出结构一致。
执行结果验证
运行上述SQL后,输出结果与预期完全匹配:
| department | employee | salary |
|---|---|---|
| IT | Mark | 9000 |
| IT | Cindy | 8500 |
| IT | John | 8500 |
| IT | James | 7000 |
| Sales | Zeus | 8000 |
| Sales | Sam | 6000 |
| Sales | Robert | 6000 |
| Sales | Mary | 5000 |
内容的提问来源于stack exchange,提问作者lucky
相关产品推荐
相关产品推荐

