【发布时间】:2021-11-03 19:46:57
【问题描述】:
SQL 问题:
编写 SQL 查询,从 Employee 表中获取第 n 高的薪水(SQL Server)
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
对于此示例,n = 2 的第 n 高薪水是 200。如果没有第 n 高薪水,则查询应返回 null。
| getNthHighestSalary(2) |
+------------------------+
| 200 |
我的代码如下:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
select distinct a.salary from Employee a, Employee b where
a.id =b.id-n+1 order by a.id desc
limit 1
);
END
我的问题是:该代码适用于大多数情况,但在第 n 位之前有多个相同值的情况除外。例如,当 n 为 2 时,表格如下。 (预期的结果应该是 NULL 并且我的代码返回 100。)那么,我怎样才能更改我的代码以使其适用于所有情况?谢谢!
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
| 2 | 100 |
| 3 | 100 |
+----+--------+
【问题讨论】:
-
ID 是否已经按薪水排序(可能有领带)?
-
id 是表的主键,我觉得应该排序?
-
你说的是 SQL Server。但标记 MySQL。您实际使用的是哪个 dbms?
-
希望答案是有帮助的。彻底回答问题很费时间。如果您的问题已解决,请接受解决方案。 ✔ 位于答案左上角的 ▲/▼ 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您还可以使用 ▲/▼ 箭头对答案的有用性进行投票。 如果解决方案无法回答问题,请发表评论。 What should I do when someone answers my question?。谢谢。