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)