Oracle之分析函数、开窗函数

一、rank() over(partition by 字段1 order by 字段2)

从最经典的一个例子来说:

这是原始表结构:
在这里插入图片描述

现在需要增加一列,用来统计每天不同城市的完成率排名。

这意味着要对其分组,按时间分组,并且同一时间返回多个结果

普通分组函数(group by按某一个条件分组,必须要使用聚合函数,每组返回一个结果

这就需要使用rank() over(partition by 字段1 order by 字段2)函数,即分析函数(partition by)+开窗函数(order by)
在这里插入图片描述

select a.*,rank() over(partition by kpi_date order by 完成率 desc) 排名 from xxx_bb_s3_qs a
order by kpi_date desc,完成率 desc;

partition by 字段1 是指按照字段1进行分组

order by 字段2 是指按照字段2进行排序

二、sum(字段1) over(partition by 字段2 order by 字段3)

参考了这篇博文:http://blog.csdn.net/rfb0204421/article/details/7672207

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、rank() ,dense_rank()和 row_number() 区别

SQL> select region_id, customer_id, sum(customer_sales) total,
2 rank() over(order by sum(customer_sales) desc) rank,
3 dense_rank() over(order by sum(customer_sales) desc) dense_rank,
4 row_number() over(order by sum(customer_sales) desc) row_number
5 from user_order
6 group by region_id, customer_id;

REGION_ID CUSTOMER_ID TOTAL RANK DENSE_RANK ROW_NUMBER


                                               rank  dense_rank  row_number
     8          18                1253840         11         11          11
     5          2                 1224992         12         12          12
     9          23                1224992         12         12          13
     9          24                1224992         12         12          14
     10         30                1216858         15         13          15

rank() 相同,返回相同排名;排名跳跃式。

dense_rank() 相同,返回相同排名;排名连续式

row_number() 相同,返回不同排名;排名连续式。

原文:https://blog.csdn.net/walktoprogram/article/details/48782275

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值