每天一道SQL题之day04

每天一道SQL题

每天一道SQL题之day04


1、题目:

链接: 分数排名

表:Scores

Column NameType
idint
scoredecimal

在 SQL 中,id 是该表的主键。
该表的每一行都包含了一场比赛的分数。Score 是一个有两位小数点的浮点值。

查询并对分数进行排序。排名按以下规则计算:

  • 分数应按从高到低排列。
  • 如果两个分数相等,那么两个分数的排名应该相同。
  • 在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。

score 降序返回结果表。

示例 1:

输入:
Scores 表:

idscore
13.50
23.65
34.00
43.85
54.00
63.65

输出:

scorerank
4.001
4.001
3.852
3.653
3.653
3.504

2、题解

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

3、解析

-窗口函数语法:

window_function(expr) OVER(
						partition by .....
						order by .....
						frame_clause ......
						)

如果后面括号中什么都不写,则意味着窗口包含满足where条件的所有行,窗口函数基于所有行进行计算;如果不为空,则有三个参数来设置窗口:

  • partition by 子句:按照指定字段进行分区,两个分区由边界分隔,窗口函数在不同的分区内分别执行,在跨越分区边界时重新初始化。
  • order by 子句:按照指定字段进行排序,窗口函数将按照排序后的记录顺序进行编号。
  • frame 子句:当前分区的一个子集,用来定义子集的规则,通常用来作为滑动窗口使用。

另使用函数:dense_rank()

  • 不间断的组内排序.使用这个函数时,可以出现1.1.2.2这种形式的分组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值