oj-sql

题目

177. 第N高的薪水

考察点

  1. 函数定义
  2. 变量定义
  3. 基于group by的排序,解决同名同级问题
  4. 窗口函数

solution

使用desc倒序

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    # 设置偏移量,下方sql中无法直接 N-1
    SET N := N-1;
RETURN (
      SELECT 
            salary
      FROM 
            employee
      GROUP BY 
            salary
      ORDER BY 
            salary DESC
      LIMIT N, 1
    );
END

使用dense_rank排名

窗口函数介绍参见这里

可用于排序、排名的窗口函数有:

本题应该用DENSE_RANK获取无缺口排名。

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  RETURN (
        SELECT 
            DISTINCT salary
        FROM 
            (SELECT 
                salary, DENSE_RANK() over(ORDER BY salary DESC) AS rnk
             FROM 
                employee) t_tnk
        WHERE rnk = N
  );
END