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

SQL——查找第N高的数据

程序员文章站 2024-03-23 21:10:58
...

查找第N高的数据

插在第N高的数据,在学生成绩查询,薪水查询中经常用到,下面结合一道力扣上的题来总结一下该类题型应该如何求解

第二高薪水

题目来源:176. 第二高的薪水
SQL——查找第N高的数据
解决思路:
第一步:我们可以先考虑对薪水进行排序
select distinc Salary from Employee order by Salary desc;
第二步:选取第二的薪水
select distinct Salary from Employee order by Salary desc limit 1,1;
第三步:处理特殊情况:如果不存在第二高薪水的情况

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

总结:
主要考察以下几个知识点:
1、如何去重,distinct的使用
select distinct Salary from Employee
2、limit和offset

  • limit n 字句表示查询结果返回前n条数据
  • offset n 表示跳过x条数据 limit y offset
  • x表示结果跳过x条数据,读取前y条数据
    举例:
    语句1:select * from student limit 9,4
    语句2:slect * from student limit 4 offset 9
    语句1和2均返回表student的第10、11、12、13行 。
    语句2中的4表示返回4行,9表示从表的第十行开始

3、判断空值函数(ifnull)如何使用
fi(a,b)函数,如何value1 不是空,则返回a
如果value1是空,结果返回b

返回第N高的薪水

题目来源:力扣177. 第N高的薪水
编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。
SQL——查找第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
    )
    
  );
END