mysql | 求某列第二大的值

题目

求某一列第二大的值

  • 如果没有第二大的值,返回NULL

方法1.使用MAX关键字

  • 进行两次排序,第一次选出max后,再从剩下的进行排序选出第二大的
SELECT MAX(Salary) AS SecondHighestSalary FROM Employee 
WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee);

方法2. 子查询和limit从句

  • 降序(desc)排列不同(distinct)的值,利用limit和offset选出第二大的值
SELECT DISTINCT
    Salary AS SecondHighestSalary
FROM
    Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
  • 上面的有问题,当只有一行记录时,会返回空,而不是NULL;
  • 解法:利用temp table解决这一问题
SELECT
    (SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1)
    AS SecondHighestSalary

参考second-highest-salary

你可能感兴趣的:(编程范式)