持续创作,加速成长!这是我参与「掘金日新计划 · 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