【SQL刷题系列】:leetcode177 Nth Highest Salary
16lz
2021-01-22
▌题目描述
Write a SQL query to get the nth highest salary from the
Employee
table.
写一段SQL查询语句,以得到Employee表中第n个高的工资。
+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+
For example, given the above Employee table, the nth highest salary where n = 2 is
200
. If there is no nth highest salary, then the query should returnnull
.
例如,给定以上Employee表,第2高的工资就是200。如果没找到第n个高的公司,查询需要返回null。
+------------------------+| getNthHighestSalary(2) |+------------------------+| 200 |+------------------------+
▌参考答案
题中已经写好了一个函数,我们需要将查询的SQL语句写在注释下面,然后返回结果。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
RETURN (
# Write your MySQL query statement below.
);
END
参考1:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC LIMIT M, 1
);
END
▌答案解析
参考1
查找第n高的工资,我们很自然的想到了LIMIT的用法。
LIMIT X,Y含义:X表示跳过X个数据,Y表示选取Y个数据。
或者使用 LIMIT Y OFFSET X,也是一样的效果。
如果想要得到第n高的工资,那么就需要跳过前面n-1个数据。因此,我们直接写成下面这样:
SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC LIMIT N-1, 1
但是这样写是有语法错误的,SQL语句无法执行。因此我们绕过这种错误写法,而在前面定义一个新的变量M,它的值为N-1,这样就可以完美解决了。
DECLARE M INT;
SET M=N-1;
所以,最终的完整代码如下:
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
DECLARE M INT;
SET M=N-1;
RETURN (
# Write your MySQL query statement below.
SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC LIMIT M, 1
);
END
更多相关文章
- Python 为什么不支持 switch 语句?
- Python 为什么要有 pass 语句?
- Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
- 不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?
- SQL select语句笔记
- Ansible 之 when判断语句使用
- PHP语法:goto 语句
- 在 PHP 中格式化并高亮 SQL 语句