如何在GRID DB中按部门查询员工的第二高薪资
关于GridDB中DENSE_RANK()的支持及查询语句实现
一、DENSE_RANK()在GridDB中的支持情况
GridDB完全支持DENSE_RANK()窗口函数,它遵循SQL:2003标准的窗口函数规范,能够针对分组(如按部门)内的数据进行排名计算,重复值会获得相同的排名且排名无间隔,完全适配你需求中按部门统计薪资排名的场景。
二、实现需求的查询语句
以下是满足你需求的SQL查询语句,通过CTE分步处理,逻辑清晰且兼容GridDB:
WITH dept_salary_ranks AS ( SELECT Department, Salary, DENSE_RANK() OVER (PARTITION BY Department ORDER BY Salary DESC) AS salary_rank FROM 员工表 ), dept_second_highest_sal AS ( SELECT Department, Salary AS second_highest_salary FROM dept_salary_ranks WHERE salary_rank = 2 GROUP BY Department, Salary -- 避免部门存在多个相同第二高薪资时返回重复记录 ) SELECT e.Empid, e.Empname, e.Salary, e.Department, d.second_highest_salary FROM 员工表 e LEFT JOIN dept_second_highest_sal d ON e.Department = d.Department;
语句说明:
dept_salary_ranks:为每个部门的薪资按降序计算排名,相同薪资会获得相同的排名值。dept_second_highest_sal:筛选出每个部门排名为2的薪资,通过GROUP BY确保每个部门仅返回一条第二高薪资记录。- 最终关联查询:将原员工表与部门第二高薪资结果左连接,确保每个员工行都能展示所属部门的第二高薪资;若部门无第二高薪资(如仅1名员工),对应字段会显示
NULL。
内容的提问来源于stack exchange,提问作者Harshal
相关产品推荐
相关产品推荐

