1. 第N高的薪水

题目地址


难度

中等

题目详情

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

  1. Employee
  2. +----+--------+
  3. | Id | Salary |
  4. +----+--------+
  5. | 1 | 100 |
  6. | 2 | 200 |
  7. | 3 | 300 |
  8. +----+--------+
  9. +-------------------------+
  10. | getNthHighestSalary(2) |
  11. +-------------------------+
  12. | 200 |
  13. +-------------------------+
  14. 例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null

思路

  1. 排名第N高,意味着 OFFSET N-1,但是LIMIT和OFFSET 只能接受正整数,0、负数、小数都不支持,所以需要事先声明 N=N-1

题解

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N := N-1;
  RETURN (
      SELECT 
            salary
      FROM 
            employee
      GROUP BY 
            salary
      ORDER BY 
            salary DESC
      LIMIT N, 1
  );
END