题目:
编写一个 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版权协议,转载请附上原文出处链接和本声明。