写在前面
- 使用的SQL环境为mysql。
- 解答均不使用开窗函数,通过题目考察对数据库的理解;但是实际工作环境中,使用开窗函数会很方便。
- 适用人群,想通过练习学习SQL的同学,主要是DQL。
- Leetcode均提供上线测试环节,可以在网站上在线练下手。
简单难度
176. Second Highest Salary
SELECT
IFNULL(
(SELECT
DISTINCT salary
FROM
employee
ORDER BY
salary DESC
LIMIT 1 OFFSET 1
) ,NULL) AS `SecondHighestSalary`
-
limit x offset y 的语法解释
在已经生成的table中,跳过y行后,取到接下来的x行。 -
ifnull(x,y) 函数
与excel中的函数类似,应该是当x的值为null的时候,返回y值;不为null,则返回x的值;如果不使用ifnull函数,当找不到第二高的工资时候,返回结果不显示。
讨论区另外一个可行的解法:
SELECT
MAX(salary) AS `SecondHighestSalary`
FROM
employee
WHERE
salary <> (SELECT
MAX(salary)
FROM
employee)
这可以有效避免null的问题。
从计算复杂度的角度来看,这两个答案应该没有区别。