1. 找出最大值,再从小于最大值的值中找出最大值
1  | select max(Salary) as SecondHighestSalary  | 
这种方法的优点是如果存在第二大的,则一定能返回;如果不存在,则会返回null。
缺点是难以处理第3, 4, 5…大的数据。  
2. limit与offset
limit可以限制结果的条数,offset是跟limit连用的,可以限制limit开始的位置。
如数据为1,2,3,4,5,limit 2获得的是1,2,而如果limit 2 offset 1返回的就是2,3,开始limit的位置向后偏移了1位。
另外,limit m offset n可以写成limit n, m
如果offset超出了数据范围,则不会报错,结果会得到空集,代表0条记录,而不是结果为null。  
1  | select distinct Salary as SecondHighestSalary  | 
上述代码的问题是,当不存在第二大的值时,如仅有数据为2,offset超出范围,返回的结果是空集,而不是题目中要求的null。
为了解决这个特殊情况,使用IFNULL(expression, alt_value)函数,当expression为null时返回alt_value,当expression不为null时,返回expression。
修改上述代码为:  
1  | select ifnull(  |