mysql - 选择列中的第 n 个最大值,如果不存在则为 null

标签 mysql

我正在尝试解决 LeetCode 问题 https://leetcode.com/problems/second-highest-salary/description/ ;到目前为止我的解决方案(另见 http://sqlfiddle.com/#!9/4752cb/1 )是:

SELECT Salary AS SecondHighestSalary 
FROM Employee 
ORDER BY Salary DESC LIMIT 1, 1;

问题是我的解决方案在以下测试用例中失败:

enter image description here

换句话说,它只是不返回结果而不是返回 NULL 。如果没有第二高的薪水,我怎样才能让它返回 NULL

更新

Return a value if no record is found 之后,我尝试将查询封装在子查询中:
SELECT (SELECT Salary 
FROM Employee 
ORDER BY Salary DESC LIMIT 1, 1) AS SecondHighestSalary;

但是,这在不同的测试用例中失败了,其中有两名员工的薪水相同:

enter image description here

在这种情况下,我们显然也应该返回 NULL 。我如何调整上面的“更接近解决方案”查询来处理这个问题?

最佳答案

这里的 OFFSET 1 表示没有第一个(例如:如果你不想显示第一个 2 那么 OFFSET 将是 2)

SELECT
    Salary AS SecondHighestSalary 
FROM
    Employee

ORDER BY
    Salary

LIMIT 1 OFFSET 1;

关于mysql - 选择列中的第 n 个最大值,如果不存在则为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148094/

相关文章:

mysql - SQL 中缺少 ID 号而停止自动递增?

mysql - 删除数据表单表外键约束错误

php - 如何在数据库中存储数组

asp.net - 使用适用于 .NET 的 Mysql 连接器批量插入

mysql - 如何为同一数据库中的所有表设置唯一的主键

java - 不同用户使用不同的值同时更新数据库记录

mysql - 有任何理由使用 TINYTEXT 吗?

mysql - 最佳数据库模式结构

java - 更新数据到mysql数据库表失败

mysql - 在 Coldfusion 中写入数据库时​​如何防止字段长度错误破坏脚本?