18 Star 92 Fork 52

柯基与佩奇 / 数据库SQL实战

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
77.第N高的薪水.md 1.92 KB
一键复制 编辑 原始数据 按行查看 历史
王鹏 提交于 2020-09-30 13:44 . 第N高的薪水

第N高的薪水

题目描述

Create table If Not Exists Employee (Id int, Salary int)
Truncate table Employee
insert into Employee (Id, Salary) values ('1', '100')
insert into Employee (Id, Salary) values ('2', '200')
insert into Employee (Id, Salary) values ('3', '300')

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

+----+--------+ | Id | Salary | +----+--------+ | 1 | 100 | | 2 | 200 | | 3 | 300 | +----+--------+ 例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

+------------------------+ | getNthHighestSalary(2) | +------------------------+ | 200 | +------------------------+

答案

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
  if N<0 then    
    RETURN (select min(Salary) from Employee);
  else   
    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 NthHighestSalay 
    );
  end if;
END

题解

第N高的薪水,可以利用 limit x,y来解答 limit x, y 类似于 limit x offset y ,即跳过x行, 取y行数据。

题中,输入N,即返回第N高的薪水,则 当 N < 0 时,返回最低工资。(经测试,默认是这样返回,其他的按需求返回即可) 当 N >= 1 时,则返回第N高工资

因为 limit x, y 函数的关系,跳过x行,取y行。故输入N的时候,需要先减去1才能取回第N高的薪水,否则会跳过第N高的薪水数据,取了第N+1高的薪水数据出来,所以代码如下

SQL
1
https://gitee.com/wp950820/database-sql-combat.git
git@gitee.com:wp950820/database-sql-combat.git
wp950820
database-sql-combat
数据库SQL实战
master

搜索帮助