You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中查询第10高员工薪资的解决方案(含重复薪资场景)

获取第10高员工薪资的问题与解决方案

我创建了一张包含10条员工详情记录的表,尝试通过不同查询语句获取员工的第10高薪资,过程中遇到了一些问题,同时也找到了可行方案,具体如下:

1. 使用dense_rank()遇到的问题

尝试用dense_rank()查询的语句如下:

SELECT * from (
    select emp_id, emp_name, designation, salary, 
    dense_rank() 
    over(order by salary desc) as dr 
    from employee) as top_salary
where dr = 7;

该查询返回了3条记录,由于使用dense_rank(),必须手动设置where dr = 7;即便改用rank(),也需要设置where dr = 8。但存在重复薪资时无法直接用dr = 10,请问有什么替代方案?

2. PostgreSQL中使用TOP语法失败的问题

尝试用TOP语法的查询语句如下:

SELECT TOP (1) Salary FROM
(
    SELECT DISTINCT TOP (10) Salary FROM Employee ORDER BY Salary DESC
) AS Emp ORDER BY Salary;

我在PostgreSQL中使用该查询,但因PostgreSQL不支持TOP语法而无法运行,请问还有其他解决方案吗?

目前可用的有效查询

方案一:使用ROW_NUMBER()

SELECT distinct salary,designation,emp_id, emp_name FROM (
  SELECT designation,salary,emp_id, emp_name ,ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
  FROM Employee
) AS ranked_salaries
WHERE row_num = 10;

方案二:使用LIMIT和OFFSET

SELECT distinct(salary),designation,emp_id, emp_name
FROM employee
ORDER BY salary desc limit 1 offset 9;

内容的提问来源于stack exchange,提问作者Sonal Bhattacharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 23:17:35