力扣177(MySQL)-第N高的薪水(中等)
题目:
表: 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行数据
标签:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)