LeetCode-177.第N高的薪水

题目:

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary);例如 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

表: Employee
+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

返回如下结果

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+
添加表结构和数据
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee`  (
  `Id` int(11) NOT NULL,
  `Salary` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `employee` VALUES (1, 100);
INSERT INTO `employee` VALUES (2, 200);
INSERT INTO `employee` VALUES (3, 300);
思路:
# Limit 返回数据的行数. Limit 1,2:从第一行数据开始,取两行的数据
解答:

直接执行下面语句,函数添加成功。

DELIMITER //
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N = N - 1;
    RETURN (
      SELECT IFNULL((SELECT DISTINCT Salary  FROM Employee ORDER BY Salary DESC  LIMIT N,1 ),NULL)
    );
END

执行函数,检验是否正确

SELECT getNthHighestSalary(2)

版权声明:本文为Myzhouzhou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。