SQL刷题Day1

leetcode177:
image.png
代码如下:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  SET N = N-1;
  RETURN (
    select DISTINCT Salary from Employee order by Salary DESC LIMIT N,1  
  );
END

解题思路:

第二高的薪水:
1.要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),2.若想降序则使用关键字 desc
3.去重,如果有多个相同的数据,使用关键字 distinct 去重
4.判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 ifNull(查询,null)方法
5.起别名,使用关键字 as

因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条)

第 N 高的薪水:
题目是 176.第二高的薪水 的变形,将查询第二名变成查询 第N名
别名中不能带参数,limit()方法中不能参与运算,因为索引从0开始,所以要 - 1,最好在外面就设定好set N = N - 1

因此正确的代码是:
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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容