力扣数据库刷题记录(一)
第二高的薪水
题目
思路
- 分析题目,题目给了一个含有两个字段的表Employee,要求返回一个含有salary排名第二的人的工资的表
- 首先对薪水进行排序,此时需要对salary进行去重,因为相同薪水的人排名相同,如果不去重用limit则得到的答案会小于等于所求薪水或不存在即
select distinct salary from Employee order by salary limit 1, 1
表示从第一位开始取取一位(这里并不是从0开始) - 其次对null进行判断,因为如果是null也需要返回一个含有null的表格而不是什么都不返回,判断null用
ifnull((select distinct salary from Employee order by salary limit 1, 1), null)
- 最后需要对字段进行重命名,需要用到as
as SecondHighestSalary
代码
select ifNull((select distinct salary from Employee order by salary desc limit 1, 1), null) as SecondHighestSalary;
第N高的薪水
题目
思路
- 这题和上一题思路上几乎没有区别,唯一改变的是细节的方面
- 这题要求编写一个函数,所以这里需要用到
create function
来创造一个函数 - 易错点是limit当中不能进行运算,所以从n-1位开始取1位即第n位
代码
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
set N = N - 1;
RETURN (
# Write your MySQL query statement below.
select ifnull((select distinct salary
from Employee
order by salary desc limit N, 1), null)
as getNthHighestSalary
);
END
总结
- 这两道题主要是熟悉了sql中ifnull语句的用法,并且综合考察了对于排序和limit的用法
- limi当中无法进行运算,需要先用set对变量进行重新赋值运算
以上,共勉