佛系每日养生题177. 第N高的薪水
2021/12/16 23:41:59
本文主要是介绍佛系每日养生题177. 第N高的薪水,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
177. 第N高的薪水
难度中等
编写一个 SQL 查询,获取 Employee
表中第 n 高的薪水(Salary)。
+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
例如上述 Employee
表,n = 2 时,应返回第二高的薪水 200
。如果不存在第 n 高的薪水,那么查询应返回 null
。
+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200 |
+------------------------+
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN SET N = N-1; RETURN ( # Write your MySQL query statement below. SELECT( SELECT DISTINCT Salary FROM Employee ORDER BY Salary DESC LIMIT 1 OFFSET N ) AS getNthHighestSalary ); END
场景分析:
- 普通连续排名:300-200-200-100排名按1-2-3-4排名
- 同级不连续:300-200-200-100排名按1-2-2-4排名
- 同级连续:300-200-200-100排名按1-2-2-3排名
Code1
-
同级连续,可以先Group By 分级再用Order By
-
排名第N高,即要Pass前N-1个数,LIMIT后不能直接接N-1,要先减去。
limit和offset字段后面只接受正整数(意味着0、负数、小数都不行)或者单一变量(意味着不能用表达式),也就是说想取一条,limit 2-1、limit 1.1这类的写法都是报错的。
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT BEGIN SET N := N-1; RETURN ( # Write your MySQL query statement below. SELECT salary FROM employee GROUP BY salary ORDER BY salary DESC LIMIT N, 1 ); END
注:这种解法形式最为简洁直观,但仅适用于查询全局排名问题,如果要求各分组的每个第N名,则该方法不适用;而且也不能处理存在重复值的情况
未完待续...
这篇关于佛系每日养生题177. 第N高的薪水的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南