数据库学习笔记-第N高问题
程序员文章站
2022-06-16 08:19:26
数据库学习笔记-第N高问题问题解决方案问题在一张名为employee的表中,有两列数据id和salary,现在要求出第n高的薪水,如果没有第n高的薪水,就返回null。(来源于LeetCode 177. 第N高的薪水)解决方案首先,简单地找到所有不重复的薪水,并且从高到低来排序。SELECT DISTINCT salaryFROM employeeORDER BY salary DESC之后可以使用limit,设置第一个返回记录的偏移量为n-1,然后指定返回1条记录。(limit和offs...
问题
在一张名为employee的表中,有两列数据id和salary,现在要求出第n高的薪水,如果没有第n高的薪水,就返回null。(来源于LeetCode 177. 第N高的薪水)
解决方案
首先,简单地找到所有不重复的薪水,并且从高到低来排序。
SELECT DISTINCT salary
FROM employee
ORDER BY salary DESC
之后可以使用limit,设置第一个返回记录的偏移量为n-1,然后指定返回1条记录。(limit和offset字段之后跟着的只能是正整数,所以不能直接使用N-1)
BEGIN
SET n = N-1;
RETURN (
SELECT DISTINCT salary
FROM employee
ORDER BY salary DESC
LIMIT n,1
);
END;
之后看了一些题解,不禁感叹大家的思路非常开阔,在这里记录下来一些个人觉得有启发性的想法:
- 排名第N的薪水,其where条件可以是“有n-1个的salary大于它”;
- mysql 8.0以上的内置函数可以帮助我们解题。如dense_rank(),它会对查询结果进行排名并生成序号,数值相同的情况下序号相同,且不管有多少个同样的数值,下一个序号都是上一个+1(即rank值紧接上一次的rank值)。dense_rank()函数需要与over()配合使用,over()可以接受order by…作为参数。只要找到生成的序号为N的salary即可。
本文地址:https://blog.csdn.net/weixin_42245121/article/details/108579229
下一篇: 2020-09-13
推荐阅读
-
Oracle数据库查找第n行(n>=2)时使用rownum查不到的问题如何解决?
-
WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题
-
php SQLite学习笔记与常见问题分析第1/2页
-
数据库学习笔记-第N高问题
-
php SQLite学习笔记与常见问题分析第1/2页_php技巧
-
php SQLite学习笔记与常见问题分析第1/2页
-
WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题
-
Oracle数据库查找第n行(n>=2)时使用rownum查不到的问题如何解决?
-
韩顺平_php从入门到精通_视频教程_第21讲_解答学员有关问题_学习笔记_源代码图解_PPT文档整理
-
SQLite数据库安装 php SQLite学习笔记与常见问题分析第1/2页