欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

数据库学习笔记-第N高问题

程序员文章站 2022-03-08 15:10:51
数据库学习笔记-第N高问题问题解决方案问题在一张名为employee的表中,有两列数据id和salary,现在要求出第n高的薪水,如果没有第n高的薪水,就返回null。(来源于LeetCode 177. 第N高的薪水)解决方案首先,简单地找到所有不重复的薪水,并且从高到低来排序。SELECT DISTINCT salaryFROM employeeORDER BY salary DESC之后可以使用limit,设置第一个返回记录的偏移量为n-1,然后指定返回1条记录。(limit和offs...

数据库学习笔记-第N高问题

问题

在一张名为employee的表中,有两列数据id和salary,现在要求出第n高的薪水,如果没有第n高的薪水,就返回null。(来源于LeetCode 177. 第N高的薪水)

解决方案

首先,简单地找到所有不重复的薪水,并且从高到低来排序。

SELECT DISTINCT salary
FROM employee
ORDER BY salary DESC

之后可以使用limit,设置第一个返回记录的偏移量为n-1,然后指定返回1条记录。(limit和offset字段之后跟着的只能是正整数,所以不能直接使用N-1)

BEGIN
  SET  n = N-1;
  RETURN (
    SELECT DISTINCT salary 
    FROM employee
    ORDER BY salary DESC
    LIMIT n,1
  );
 END;

之后看了一些题解,不禁感叹大家的思路非常开阔,在这里记录下来一些个人觉得有启发性的想法:

  • 排名第N的薪水,其where条件可以是“有n-1个的salary大于它”;
  • mysql 8.0以上的内置函数可以帮助我们解题。如dense_rank(),它会对查询结果进行排名并生成序号,数值相同的情况下序号相同,且不管有多少个同样的数值,下一个序号都是上一个+1(即rank值紧接上一次的rank值)。dense_rank()函数需要与over()配合使用,over()可以接受order by…作为参数。只要找到生成的序号为N的salary即可。

本文地址:https://blog.csdn.net/weixin_42245121/article/details/108579229

相关标签: 数据库 mysql