over partition by order by rows|range(6)之rank()和dense_rank()

前文中的First_value、Last_value和Nth_value用于提取指定的行

某些时候,我们需要对分区中的数据进行排序,并得到序号,

这样,rank()和dense_rank()函数就用上了。

rank() over(partition by ... order by ...)

dense_rank() over(partition by ... order by ...)

rank和dense_rank不支持开窗语句

如果出现相同的行,那么rank函数将跳过这些行,形成新的排名

而dense_rank则形成连续的排名

示例:

第一步,创建一个具有相同sale的数据行

update sales_fact set sale='2008.10' where id_=1801;

SQL如下:

select id_,
year,week,product,
sale,
rank() over ( 
partition by product,region,country,year
order by sale
) rank_sale,
dense_rank() over (
partition by product,region,country,year
order by sale
) dense_rank_sale
from sales_fact
where product='product1' and country='country1' and region='region1'
order by product,country,year,week

结果集如下:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值