题目:
解答:
解法一:
分两部分考虑,第一部分是最高的薪水,第二部分是比最高薪水小的最高的薪水,即第二高薪水
select Max(Salary) SecondHighestSalary from Employee
where Salary<(select Max(Salary) from Employee)
解法二:
select IFNULL(
(select Salary from Employee
group by Salary
order by Salary DESC
limit 1,1),null
) as SecondHighestSalary
解析
回顾一下本题中涉及的一些数据库语句的基本用法。
GROUP BY和ORDER BY
group by:通过指定的规则,对数据进行分组,将一个“数据集”划分成若干个“小区域”,从而对若干个“小区域”进行数据处理。
order by: 用来对数据库的一组数据进行排序。其中 desc 为降序,asc 为升序。
group by 和 order by 通常一起使用,从而完成分组加排序的功能
注意:若 group by 和 order by 一起使用时,order by 要在 group by 的后面,并且 order by 的列必须出现在 group by 子句中。
通常和常见的一些聚合函数一起使用
函数 | 作用 | 支持性 |
---|---|---|
sum(列名) | 求和 | |
max(列名) | 最大值 | |
min(列名) | 最小值 | |
avg(列名) | 平均值 | |
first(列名) | 第一条记录 | 仅Access支持 |
last(列名) | 最后一条记录 | 仅Access支持 |
count(列名) | 统计记录数 |
LIMIT 子句
limit 子句用于限制 select 语句查询结果返回的数量。limit 接受一个或两个数字参数。参数必须是一个整数常量。
如果给定一个参数,那么返回查询结果的前n个记录。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
select * from tableName limit i,n
i : 为查询结果的索引值(默认从0开始)
n : 为查询结果返回的数量
IFNULL()函数
IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
IFNULL(expression, alt_value)
如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值。