LeetCode 176. Second Highest Salary第二高薪水(数据库)

题目:

LeetCode 176. Second Highest Salary第二高薪水(数据库)_第1张图片

解答:

解法一:

分两部分考虑,第一部分是最高的薪水,第二部分是比最高薪水小的最高的薪水,即第二高薪水

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,则返回第二个参数的备用值。

你可能感兴趣的:(LeetCode)