300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > oracle之分析函数 开窗函数 Oracle之分析函数 开窗函数

oracle之分析函数 开窗函数 Oracle之分析函数 开窗函数

时间:2023-08-18 22:06:35

相关推荐

oracle之分析函数 开窗函数 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)

三、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() 相同,返回不同排名;排名连续式。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。