📅  最后修改于: 2023-12-03 15:35:04.729000             🧑  作者: Mango
在SQL中,有时候需要查询第二大的值,比如在一个员工薪资表中找出第二高的薪资。
以下是两种方法实现这个需求。
使用ORDER BY
和LIMIT
子句,将结果集按降序排列,再搜索第二行。
SELECT salary
FROM employee
ORDER BY salary DESC
LIMIT 1 OFFSET 1;
解释:
ORDER BY salary DESC
按员工薪资的降序排列LIMIT 1 OFFSET 1
限制结果集只有一行,偏移量为1,即跳过第一行,返回第二行使用子查询,先找出表中最大的薪资,再找出所有小于最大薪资的薪资,按降序排列,再找出第一行。
SELECT MAX(salary)
FROM employee
WHERE salary < (SELECT MAX(salary) FROM employee);
解释:
(SELECT MAX(salary) FROM employee)
为子查询,返回表中最大的薪资WHERE salary < (SELECT MAX(salary) FROM employee)
筛选出所有薪资小于最大薪资的行ORDER BY salary DESC LIMIT 1
按降序排列并返回第一行以上是SQL Select Second Max的两种常见方法,可根据实际数据和查询需求选择适当的方法。