题目:

表: Employee

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

查询结果格式如下所示

示例1:

示例2:

解题思路:

方法一:

①需要考虑有相同薪水的情况,相同薪水排名一样但是求第n高是需要跳过重复薪水的,因此可以使用group by salary 或者使用distinct 。【group by 把重复的合为一组,也能起到去重的作用】

②排名第N高,需要跳过 N- 1,如果使用 LIMIT 和 OFFSET 没法直接使用 LIMIT N-1,因为 LIMIT 和 OFFSET 后面只能接受正整数(0、负数、小数、表达式都不行)

 1 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
2 BEGIN
3 SET N := N - 1;
4 RETURN (
5 # Write your MySQL query statement below.
6 select distinct salary
7 from Employee
8 order by salary desc
9 limit N,1
10 );
11 END

方法二:

使用聚合函数:dense_rank() over(order by),对薪资进行降序连续排序,例如:1,2,2,3...

 1 CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
2 BEGIN
3 RETURN (
4 # Write your MySQL query statement below.
5 select distinct salary
6 from (
7 select
8 salary, dense_rank() over(order by salary desc) as rnk
9 from Employee
10 ) as a
11 where rnk = N
12 );
13 END

小知识:

①赋值方法:

‘=’ 和 := 都是赋值操作符

②limit用法

limit n :从第一行开始,输出n行数据

例如:select * from test LIMIT 3 ; 提取前三条数据

limit m,n:从第m+1行开始,输出n行数据

例如:select * from test LIMIT 2,3; 从第三行开始提取三行数据即3,4,5行数据

limit m offset n:从第n+1行开始,输出m行数据

例如:select * from test LIMIT 3 offset 4;从第四行的下一行开始向下取3条数据即5,6,7行数据

力扣177(MySQL)-第N高的薪水(中等)的更多相关文章

  1. MYSQL查询第二高的薪水

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+| Id | Salary |+----+--------+| 1 | 100 || ...

  2. Mysql训练:第二高的薪水(IFNULL,OFFSET,LIMIT)

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...

  3. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...

  4. 力扣MYSQL练习

    176编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . select IFNULL((SELECT distinct salary from employee or ...

  5. 力扣算法题—069x的平方根

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 ...

  6. 25 mysql怎么保证高可用

    上一篇介绍了binlog的基本内容,在主备关系中,是每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有的binlog,都可以传到备库并被正确执行,备库就能跟主库一致的状态, ...

  7. 力扣——candy (分糖果) python实现

    题目描述: 中文: 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. ...

  8. 力扣算法——135Candy【H】

    老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果.相邻的孩子中,评分高 ...

  9. 力扣643.子数组最大平均数I-C语言实现

    题目 给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5- ...

  10. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

随机推荐

  1. DiagnosticSource DiagnosticListener 无侵入式分布式跟踪

    ASP.NET Core 中的框架中发出大量诊断事件,包括当前请求进入请求完成事件,HttpClient发出收到与响应,EFCore查询等等. 我们可以利用DiagnosticListener来选择性 ...

  2. linux下查看端口对应的进程号

    在部署服务的时候,会指定对应的端口号,如果想kill 对应的端口,就要找到对应的进程,查看端口对应的进程号,有两种方法: 1.lsof命令,查看系统打开的文件(在linux中,所有的都是文件),需要管 ...

  3. stars-one的原创工具——文档生成器

    Github 可以快速生成静态页面文档的工具,适用于文档翻译或者是个人项目,个人开发者可以快速将生成的静态页面部署在gitee或者github上 优点 规范 使用流行的markdown格式编写文档 美 ...

  4. 巧用Maya轴心操作小技巧,工作事半功倍!

    Maya 是一款专业的三维软件,可以用于创建规模宏大的世界.复杂的角色和炫酷的特效.Maya的用户遍布动画行业.影视特效.广告和片头.平面设计行业,用户数量十分庞大.本文分享了maya轴心操作的小技巧 ...

  5. 【UE虚幻引擎】干货!UE修改分辨率的3种方法

    虚幻引擎作为一款实时3D创作工具,在游戏.建筑.影视动画.虚拟仿真等领域受到全球各行各业创作者广泛欢迎,在UE中获取和设置分辨率也是3D创作开发工作中的常用功能.本文介绍了在虚幻引擎中修改分辨率的3种 ...

  6. String内存模型和Java常用方法

    一.String内存模型 1.直接赋值创建string对象内存原理: StringTable(串池):字符串常量池,用来存储字符串,只能是在直接赋值中使用才会存在串池当中(JDK7前串池是在方法区里面 ...

  7. Python编程规范+最佳实践

    前言 Python之禅是影响Python编程语言设计的19条原则,也是Python编码规范的核心理念. 优美胜于丑陋(Python 以编写优美的代码为目标) 明了胜于晦涩(优美的代码应当是明了的,命名 ...

  8. 记录-JS 基础知识大全

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1.通过javascript向文档中输出文本 document是javascript的内置对象,代表浏览器的文档部分 document.w ...

  9. drools中no-loop和lock-on-active的区别

    一.背景 在我们编写drools规则的过程中,可能会发生死循环,那么该怎么解决呢?如果想某一个规则只执行一次,即别的规则导致该规则重新执行,也不需要执行,那么该怎么解决呢? 二.解决方案 针对以上问题 ...

  10. CYarp:力压frp的C#高性能http内网反代中间件

    我以前开发过HttpMouse的http内网反代中间件,但由于当时的知识点与设计水平受限,所以把它下马了.随着自身又遇到http内网反代的需求,在frp不能满足我需求情况下,我又启动了一个叫CYarp ...