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( |