▌题目描述


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 return null.

例如,给定以上Employee表,第2高的工资就是200。如果没找到第n个高的公司,查询需要返回null。


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

▌参考答案


题中已经写好了一个函数,我们需要将查询的SQL语句写在注释下面,然后返回结果。

CREATE FUNCTION getNthHighestSalary(N INTRETURNS INT
BEGIN
  RETURN (
      # Write your MySQL query statement below.

  );
END


参考1:

CREATE FUNCTION getNthHighestSalary(N INTRETURNS 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 INTRETURNS 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


©著作权归作者所有:来自51CTO博客作者mb5fe18e9fef50b的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Python 为什么不支持 switch 语句?
  2. Python 为什么要有 pass 语句?
  3. Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
  4. 不使用 if-elif 语句,如何优雅地判断某个数字所属的等级?
  5. SQL select语句笔记
  6. Ansible 之 when判断语句使用
  7. PHP语法:goto 语句
  8. 在 PHP 中格式化并高亮 SQL 语句

随机推荐

  1. Linux性能优化(五)——性能监控工具
  2. 小姐姐对不喜欢的男孩到底有多残忍?
  3. 007. 整数反转 | Leetcode题解
  4. 专属开发者的福利,1000刀+的羊毛在等你
  5. 008. 字符串转换整数 (atoi) | Leetcode
  6. 010. 正则表达式匹配 | Leetcode题解
  7. Linux 目录
  8. 016. 最接近的三数之和 | Leetcode题解
  9. 011. 盛最多水的容器 | Leetcode题解
  10. 漫画 | 揭密微信诞生记之民间传说