LeetCode 176. Second Highest Salary第二高薪水(数据库)
题目:
解答:
解法一:
分两部分考虑,第一部分是最高的薪水,第二部分是比最高薪水小的最高的薪水,即第二高薪水
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 子句中。
通常和常见的一些聚合函数一起使用
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,则返回第二个参数的备用值。
