📢📢📢📣📣📣
哈喽!大家好,我是【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 …)
大家点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻微信公众号👇🏻👇🏻👇🏻
版权归原作者 IT邦德 所有, 如有侵权,请联系我们删除。