【问题标题】:how to find the nth highest number when values of the numbers are the same当数字的值相同时如何找到第n个最高的数字
【发布时间】: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?。谢谢。

标签: mysql sql database


【解决方案1】:

试试这个

    Select distinct salary
   From (
    Select salary, dense_rank() over 
   (order by salary desc) r
   from employee 
    ) where r=n



     

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多