力扣数据库刷题记录(一)

力扣数据库刷题记录(一)

第二高的薪水

题目

第二高的薪水

思路

  1. 分析题目,题目给了一个含有两个字段的表Employee,要求返回一个含有salary排名第二的人的工资的表
  2. 首先对薪水进行排序,此时需要对salary进行去重,因为相同薪水的人排名相同,如果不去重用limit则得到的答案会小于等于所求薪水或不存在即
    select distinct salary from Employee order by salary limit 1, 1
    表示从第一位开始取取一位(这里并不是从0开始)
  3. 其次对null进行判断,因为如果是null也需要返回一个含有null的表格而不是什么都不返回,判断null用
    ifnull((select distinct salary from Employee order by salary limit 1, 1), null)
  4. 最后需要对字段进行重命名,需要用到as
    as SecondHighestSalary

代码

select ifNull((select distinct salary from Employee order by salary desc limit 1, 1), null) as SecondHighestSalary;

第N高的薪水

题目

第N高的薪水

思路

  1. 这题和上一题思路上几乎没有区别,唯一改变的是细节的方面
  2. 这题要求编写一个函数,所以这里需要用到create function来创造一个函数
  3. 易错点是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

总结

  1. 这两道题主要是熟悉了sql中ifnull语句的用法,并且综合考察了对于排序和limit的用法
  2. limi当中无法进行运算,需要先用set对变量进行重新赋值运算

以上,共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值