0


【LeetCode-SQL高手挑战】—178. 分数排名

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

在这里插入图片描述

文章目录

🐴 1.SQL题目概述

LeetCode原题链接

表结构: Scores
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| score       | decimal |
+-------------+---------+
Id是该表的主键。
该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的浮点值。

🚀题目:
编写 SQL 查询对分数进行排序。排名按以下规则计算:
1.分数应按从高到低排列。
2.如果两个分数相等,那么两个分数的排名应该相同。
3.在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
4.按 score 降序返回结果表。

🚩查询结果如下例所示

输入: 
Scores 表:
+----+-------+
| id | score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+
输出: 
+-------+------+
| score | rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

🐴 2.解题思路

MySQL8.0 中可以利用 DENSE_RANK()个窗口函数实现上述排名,
需要注意的一点是 as 后的别名,千万不要与前面的函数名重名,否则会报错
Oracle中直接有对应的开窗函数 DENSE_RANK()处理
邦德这里使用了数据库自带的开窗函数来解题,如果小伙伴们还有其他解题思路,欢迎评论区留言交流~
在这里插入图片描述

🐴 3.方法实现

🌈Oracle实现

select score,dense_rank() over(order by score desc) rank from Scores;

🌈MySQL实现

SELECT score,
DENSE_RANK() OVER w AS ‘rank’,
FROM Scores
WINDOW w AS (ORDER BY score desc);

🐴 4.代码测试

🌈Oracle实现
执行代码,开始测试
在这里插入图片描述
与测试结果一致,测试成功!
在这里插入图片描述


🌈MySQL实现
执行代码,开始测试
在这里插入图片描述
与测试结果一致,测试成功!
在这里插入图片描述

🐴 5.知识点小结

🌀开窗函数语法
function_name(,…) over(<partition_Clause><windowing_Clause>);
function_name():函数名称
argument:参数
over( ):开窗函数
partition_Clause:分区子句,数据记录集分组,group by…
order by_Clause:排序子句,数据记录集排序,order by…
windowing_Clause:开窗子句,定义分析函数在操作行的集合,三种开窗方式:rows、range、Specifying
注:使用开窗子句时一定要有排序子句!!!
————————————————
🌀常用分析函数
row_number() over(partition by … order by …)
rank() over(partition by … order by …)
dense_rank() over(partition by … order by …)
count() over(partition by … order by …)
max() over(partition by … order by …)
min() over(partition by … order by …)
sum() over(partition by … order by …)
avg() over(partition by … order by …)
first_value() over(partition by … order by …)
last_value() over(partition by … order by …)
lag() over(partition by … order by …)
lead() over(partition by … order by …)

大家点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻微信公众号👇🏻👇🏻👇🏻

标签: leetcode sql 数据库

本文转载自: https://blog.csdn.net/weixin_41645135/article/details/123167422
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。

“【LeetCode-SQL高手挑战】&mdash;178. 分数排名”的评论:

还没有评论