MYSQL获取具有第二个最大薪资的所有用户行

MYSQL获取具有第二个最大薪资的所有用户行,mysql,Mysql,我发现了很多关于为员工找到第二个最高工资的问题。但在所有这些职位中,只有薪水是可以选择的 select max(salary) from user WHERE salary NOT IN (SELECT max(salary) from user) 我需要所有用户行具有第二个最大工资 示例用户表 我的预期结果是 您可以使用两个子查询来隔离第二高的薪资,例如 SELECT id, name, salary FROM user WHERE salary = (SELECT MAX(salary)

我发现了很多关于为员工找到第二个最高工资的问题。但在所有这些职位中,只有薪水是可以选择的

select max(salary) from user
WHERE salary NOT IN (SELECT max(salary) from user) 
我需要所有用户行具有第二个最大工资

示例用户表

我的预期结果是


您可以使用两个子查询来隔离第二高的薪资,例如

SELECT id, name, salary
FROM user
WHERE salary = (SELECT MAX(salary) FROM user WHERE salary < (SELECT MAX(salary) FROM user));

通过此查询,您将获得第二个最高工资

SELECT salary FROM user ORDER BY salary DESC LIMIT 1, 1;
你可以像下面这样做

SELECT * 
FROM   user 
WHERE  salary = (SELECT salary 
                 FROM   user 
                 GROUP  BY salary 
                 ORDER  BY salary DESC 
                 LIMIT  1, 1) 

可以有多个用户具有相同的薪资。您也可以使用SELECT*FROM user,其中salary=SELECT DISTINCTSALRARY FROM user order by salary DESC LIMIT 1,1我不喜欢第一个解决方案,只是因为它显然无法扩展到第三、第四高薪资,等等。@草莓是的……这就是为什么SQL中引入分析函数来处理此类问题的原因之一。对
WITH cte AS (
    SELECT id, name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) dr
    FROM user
)

SELECT id, name, salary
FROM cte
WHERE dr = 2;
SELECT salary FROM user ORDER BY salary DESC LIMIT 1, 1;
SELECT * 
FROM   user 
WHERE  salary = (SELECT salary 
                 FROM   user 
                 GROUP  BY salary 
                 ORDER  BY salary DESC 
                 LIMIT  1, 1)