SQL 开窗函数,row_number, dense_rank, percent_rank

row_number dense_rank percent_rank
摘要由CSDN通过智能技术生成

目录

一、  排序:row_number(), dense_rank()

1、row_number()

2、dense_rank()

 3、应用示例:

二、  百分比:percent_rank()

1、percent_rank()参数说明

2、应用示例


一、  排序:row_number(), dense_rank()

1、row_number()

参考:SQL SERVER函数row_number的应用示例 - 墨天轮

微软从SQL SERVER 2005开始提供了一个函数:row_number(),用来生成行号。

它可以按指定字段进行排序,为查询结果集生成行号,还可以指定分组字段,对查询结果集进行分组后为每组从1开始生成行号。

它的语法:

1、不分组的方式:ROW_NUMBER() OVER (ORDER BY [排序字段名] DESC) 

2、按指定字段分组的方式:ROW_NUMBER  () OVER (PARTITION BY [分组字段名] ORDER BY [排序字段名] )

2、dense_rank()

参考:DENSE_RANK (Transact-SQL) - SQL Server | Microsoft Learn

此函数返回结果集分区中每行的排名,排名值没有间断。 特定行的排名等于该特定行之前不同排名值的数量加一。

语法

DENSE_RANK ( ) OVER ( [ <partition_by_clause> ] < order_by_clause > )  

参数

partition_by_clause<>
首先将 FROM 子句生成的结果集划分到分区,然后将 DENSE_RANK 函数应用到每个分区。 有关 PARTITION BY 语法,请参阅 OVER 子句 (Transact-SQL)

order_by_clause<>
确定将 DENSE_RANK 函数应用于分区中的行时所基于的顺序。

 3、应用示例:

select  
sku_id,sku_name,category_id3,sales_count,price,
sales_count*price as s1,
dense_rank() over(partition by category_id3 order by s1 desc) as r2 -- Invalid table alias or column reference 's1
from sales_info  where dt = '2019-04-26';
 
 
select  
sku_id,sku_name,category_id3,sales_count,price,
sales_count*price as s1,
dense_rank() over(partition by category_id3 order by sales_count*price desc) as r2,  --按照GMV排名,降序
row_number() over(partition by category_id3 order by sales_count*price desc) as r3
from sales_info  where dt = '2019-04-26';

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值