题目在这:
https://leetcode-cn.com/problems/second-highest-salary/
sql表结构:
Employee 表
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
题目分析:
题目要求找到该表中第二大的数。显然要使用limit函数。
我们先对该数据进行降序排序,去重,然后找到第二大的值就可以了。
即:select distinct Salary from Employee order by Salary desc limit 1,1;
但题目中还要求,若没有第二大的值,则返回null.所以这里使用ifNull函数。
select ifNull((select distinct Salary from Employee order by Salary desc limit 1,1),null);
注意看题目中的实例,返回值的名字被重命名了。所以。最终答案再加上重命名:select ifNull((select distinct Salary from Employee order by Salary desc limit 1,1),null) as SecondHighestSalary;
知识点
要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),若想降序则使用关键字 desc
去重,如果有多个相同的数据,使用关键字 distinct 去重
判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 ifNull(查询,null)方法
起别名,使用关键字 as …
因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条) 使用的时候是 limit 1,1 而不是limt (1,1)