1.使用子查询和 LIMIT
子句
SELECT
(SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary
distinct对相同工资去重
imit X 表示读取X个数据
limit X,Y 中X表示跳过X个数据,读取Y个数据
limit X offset Y 中X表示读取X个数量, Y 表示跳过Y个数据
2.使用 IFNULL
和 LIMIT
子句
SELECT
IFNULL(
(SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1),
NULL) AS SecondHighestSalary
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。
isnull(expr1)
如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。
NULLIF(expr1,expr2)
如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。
ifnull注意事项:
SELECT IFNULL(score,0) FROM student WHERE ID = 4;
使用IFNULL、SUM函数等需要确保有查询记录,否则也将返回null值 ,不会返回0
使用以下方式避免返回null值
SELECT IFNULL((SELECT score FROM student WHERE ID = 4),0);
3.
select max(Salary) SecondHighestSalary from Employee where Salary < (select max(Salary) from Employee)