关于建设设计院公司网站的建议,中山网站建设企业,产品开发设计,网站建设服务是什么大家好#xff0c;我是空空star#xff0c;本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目#xff1a;178. 分数排名二、解题1.错误示范①提交SQL运行结果2.错误示范②提交SQL运行结果3.正确示范①提交SQL运行结果4.正确示范②提交SQL运行结果5.正确示范③提交… 大家好我是空空star本篇带你了解一道简单的力扣sql练习题。 文章目录前言一、题目178. 分数排名二、解题1.错误示范①提交SQL运行结果2.错误示范②提交SQL运行结果3.正确示范①提交SQL运行结果4.正确示范②提交SQL运行结果5.正确示范③提交SQL运行结果6.其他总结前言 一、题目178. 分数排名
表: Scores
----------------------
| Column Name | Type |
----------------------
| id | int |
| score | decimal |
----------------------
Id是该表的主键。
该表的每一行都包含了一场比赛的分数。Score是一个有两位小数点的浮点值。
编写 SQL 查询对分数进行排序。排名按以下规则计算:
分数应按从高到低排列。如果两个分数相等那么两个分数的排名应该相同。在排名相同的分数后排名数应该是下一个连续的整数。换句话说排名之间不应该有空缺的数字。
按 score 降序返回结果表。
查询结果格式如下所示。
二、解题
1.错误示范①
提交SQL
select score,row_number() over(order by score desc ) rank
from Scores运行结果 错在了两个分数相等时两个分数的排名不相同。 2.错误示范②
提交SQL
select score,
rank() over(order by score desc) rank
from Scores运行结果 错在排名之间有空缺的数字 3.正确示范①
提交SQL
select u1.score,u2.col rank
from Scores u1
left join (select score,row_number() over(order by score desc ) colfrom(select distinct score from Scores) a
) u2
on u1.scoreu2.score
order by u2.col 运行结果 按照计算好的排名升序 left join 也可以改为join 4.正确示范②
提交SQL
select u1.score,u2.col rank
from Scores u1
join (select score,row_number() over(order by score desc ) colfrom(select distinct score from Scores) a
) u2
on u1.scoreu2.score
order by u1.score desc运行结果 按照分数降序 5.正确示范③
提交SQL
select score,
dense_rank() over(order by score desc) rank
from Scores运行结果 dense_rank函数的功能与rank函数类似dense_rank函数在生成序号时是连续的而rank函数生成的序号有可能不连续。dense_rank函数出现相同排名时将不跳过相同排名号rank值紧接上一次的rank值。在各个分组内rank()是跳跃排序有两个第一名时接下来就是第三名dense_rank()是连续排序有两个第一名时仍然跟着第二名。 6.其他 总结 row_number顺序排序 rank并列排序会跳过重复的序号比如序号为1、1、3 dense_rank并列排序不会跳过重复的序号比如序号为1、1、2