LeetCode-176.第二高的薪水

题目:

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

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

返回如下结果

+---------------------+
| SecondHighestSalary |
+---------------------+
| 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);
思路:
根据题目,可以得出,要按照字段 Salary 降序排列,取第二高的值;若没有则返回NULL。
# Limit 返回数据的行数. Limit 1:返回第一条数据
# offset 1:不包含第一条数据
# IFNULL(STR,NULL):判断第一个表达式是否为NULL,如果为NULL,则返回第二个参数
解答:
SELECT
	IFNULL( ( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET 1 ), NULL ) 
AS SecondHighestSalary

你可能感兴趣的:(#,数据库,mysql,leetcode)