题目:

表: 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. 玩转Vue3之深入理解响应式编程

    前言 Vue 3是一个功能强大的前端框架,它引入了一些令人兴奋的新特性,其中最引人注目的是ref和reactive.这两个API是Vue 3中响应式编程的核心,本文将深入探讨它们的用法和差异. 什么是 ...

  2. buntu中查看网卡信息的基础知识

    ubuntunetworkexpress工具网络access Ubuntu 中,通常有线网卡为eth0,无线网卡则为wlan0,后续增加的以此类推(可能某些无线网卡型号命名为eth1,而非wlan0) ...

  3. .NET集成DeveloperSharp操作Sql Server数据库

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. 本文提供了一种结合"原生Sql+轻量级ORM"操 ...

  4. vue中$forceUpdate()的使用

    刷新数组的作用 this.$forceUpdate(); 具体请看:vue中$forceUpdate()的使用 - 简书 (jianshu.com)

  5. STM32中RFID模块(MFRC522)简单应用

    1. 前言 ​ 此篇只是对RFID模块的简单概述以及应用,没有原理,对提供的店家提供的代码,进行注释,以及简单使用流程 2. 函数 //功 能:寻卡 //参数说明: req_code[IN]:寻卡方式 ...

  6. 国民经济行业分类与代码(GB/T 4754-2002、GB/T 4754-2011、GB/T 4754-2017)并存入MySQL数据库【可获取下载】

    戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...

  7. 链表队列(LinkedListQueue)

    栈操作 入队 template<typename T> void LinkedListQueue<T>::enqueue(T e) { if (tail == nullptr) ...

  8. .NET分布式Orleans - 9 - 贪吃蛇项目演示

    首先看完成效果 一个玩家的效果 多个玩家的效果 源码地址 https://gitee.com/chesterdotchen/snake-with-orleans 项目介绍 Snake.Common项目 ...

  9. WPF中封装一个自己的MessageBox

    前言 在WPF应用程序开发中,我们可以借助其强大灵活的设计能力打造出绚丽而富有创意的用户界面.然而,与这种高度定制化的界面相比,标准MessageBox却显得有些原始和古老.它的外观与现代.绚丽的应用 ...

  10. Jenkins设置定时触发器执行任务

    1. 选中任务,选择配置/构建触发器,选择定时构建 2. 填写定时器参数,格式说明如下,共五个参数,参数之间空格隔开,不需要填的直接*号即可.  此处d定时任务的格式遵循 cron 的语法(可以与 c ...