【SQL刷题系列】:leetcode177 Nth Highest Salary

SQL刷题系列:SQL作为一种数据库查询和程序设计语言,是从事数据技术人员必备的技能,也是各大公司的数据分析、数据挖掘、数据库等笔试题必考的一种题。所以,不论大家是转行还是学习都少不了这一关。为此,Python数据科学开启了SQL刷题的系列,希望可以帮助有需要的朋友们。 题目来源:本篇内容为Leetcode上SQL题库177 难易程度:中等

▌刷题回顾

【SQL刷题系列】:leetcode178 Rank Scores

【SQL刷题系列】:leetcode183 Customers Who Never Order

【SQL刷题系列】:leetcode180 Consecutive Numbers

▌题目描述

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 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数据科学(Python_Spiderman)

原文发表时间:2018-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏猿人谷

mysql索引使用技巧及注意事项

一.索引的作用       一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂...

41670
来自专栏Linyb极客之路

MySQL索引设计不可忽视的知识点

本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开。

10640
来自专栏数据和云

高手过招:用SQL解决环环相扣的刑侦推理问题(苏旭辉版本)

本文是继 杨长老 刑侦高考:如何用SQL解决环环相扣的刑侦推理问题 之后,苏旭辉的一个版本,希望大家能够在高手的过招中,看到喜爱、坚持、执着与技艺。

10620
来自专栏FSociety

SQL中查询效率优化

索引是独立于表的一中物理存储结构,当我们语句中用到索引的字段的时候,数据库会首先去索引中查找满足条件的数据的索引值(相当于页码),然后在根据索引值去表中筛选出我...

1K30
来自专栏Java架构沉思录

谈谈Mysql索引优化不得不提防的坑

前言 在之前的文章《聊聊Mysql优化之索引优化》中,笔者简单介绍了Mysql索引优化的原理和一些使用场景,然而Mysql索引优化的内容还远远不止这些。在实际工...

35360
来自专栏乐沙弥的世界

ROLLUP 与 CUBE 运算符的使用

    对于数据的汇总,是数据库经常用到的任务之一,除了我们通常使用的GROUP BY分组配合聚合函数对数据汇总,以及使用UNION ALL 对数据汇总之外...

34420
来自专栏JetpropelledSnake

SQL学习笔记之MySQL查询练习2

github地址: https://github.com/nql1314/sql-practises

8720
来自专栏用户2442861的专栏

好的数据库面试题集合

http://blog.csdn.net/sandyzhs/article/details/4059709

46710
来自专栏猿人谷

Oracle SQL性能优化

(1)      选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最...

40370
来自专栏简书专栏

mysql实训

设有一个数据库,包括四个表:学生表(student)、课程表(course)、成绩表(score)以及教师信息表(teacher)。用SQL语句创建四个表并完成...

17110

扫码关注云+社区

领取腾讯云代金券