「前端刷题」177.第N高的薪水(MEDIUM)

132 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

题目(Nth Highest Salary)

链接:https://leetcode-cn.com/problems/nth-highest-salary
解决数:663
通过率:46.5%
标签:数据库 
相关公司:amazon bytedance adobe 

表: Employee

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
Id是该表的主键列。
该表的每一行都包含有关员工工资的信息。

 

编写一个SQL查询来报告 Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询应该报告为 null 。

查询结果格式如下所示。

 

示例 1:

输入: 
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
n = 2
输出: 
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

示例 2:

输入: 
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
n = 2
输出: 
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| null                   |
+------------------------+

对比176

题目(Second Highest Salary)

链接:https://leetcode-cn.com/problems/second-highest-salary
解决数:1320
通过率:35.8%
标签:数据库 
相关公司:amazon bytedance facebook 

Employee 表:

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| salary      | int  |
+-------------+------+
id 是这个表的主键。
表的每一行包含员工的工资信息。

 

编写一个 SQL 查询,获取并返回 Employee 表中第二高的薪水 。如果不存在第二高的薪水,查询应该返回 null 。

查询结果如下例所示。

 

示例 1:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200                 |
+---------------------+

示例 2:

输入:
Employee 表:
+----+--------+
| id | salary |
+----+--------+
| 1  | 100    |
+----+--------+
输出:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null                |
+---------------------+

思路

第一步:根据题意,先对表中数据进行倒序排序, 薪水可能有重复数据,用distinct去重 select distinct salary from Employee order by salary desc 第二步:用limit取第n高的薪水一条数据 ,limit m,n 第一个参数跳过几条数据,第二个参数取条数据,limit不能运算 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN set n = N-1; RETURN ( # Write your MySQL query statement below. select distinct salary from Employee order by salary desc limit n,1 ); END

第三步:如果查不出数据返回null 用 ifnull()

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

console.log('Hello world!')
print('Hello world!')
puts 'Hello world!'

代码

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

或者

CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
    SET N := N-1;
  RETURN (
      # Write your MySQL query statement below.
      SELECT 
            salary
      FROM 
            employee
      GROUP BY 
            salary
      ORDER BY 
            salary DESC
      LIMIT N, 1
  );
END