分组统计排名函数

解析

dense_rank/rank()-over()用于对数据进行统计排名。
rank-over()函数对相同的统计值的排名相同,不同的统计值之间的排名不连续(相同统计值的排名均为其前面不同统计值的数量+1)。
dense_rank-over()函数对相同的统计值的排名相同,不同的统计值之间的排名连续。
注意:如果over()中使用order by 进行排序后没有重复的值则dense_rank/rank()-over()统计排名结果一致且排名均连续。
dense_rank/rank()-over()可以在over()中使用Partition By指定进行排名的数据范围进行分组统计排名。
注意:这里的partition by进行排名的数据范围,而不是SQL语句里的分组函数

示例

  • 数据集
    这里使用Oracle笔记 之 偏移量分析函数lag/lead-over函数中的数据集,但是依次分别对2022,2024,2026,2028,2030后的数据使用Update test_lagover Set dvalue = dvalue + 1 Where ymdate >= 202201;对dvalue值进行追加。
  • rank()-over()
    按每个ymdate的dvalue统计值倒序,ymdate升序进行非连续性排名
Select rank() over(Order By Sum(dvalue) Desc, ymdate) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   203001  310
2   2   203002  310
3   3   203003  310
4   4   203004  310
5   5   203005  310
6   6   203006  310
7   7   203007  310
8   8   203008  310
9   9   203009  310
10  10  203010  310
11  11  203011  310
12  12  203012  310
13  13  202801  290
14  14  202802  290
15  15  202803  290

按每个ymdate的dvalue统计值倒序进行非连续性排名

Select rank() over(Order By Sum(dvalue) Desc, ymdate) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   203001  310
2   1   203004  310
3   1   203002  310
4   1   203012  310
5   1   203011  310
6   1   203007  310
7   1   203010  310
8   1   203008  310
9   1   203003  310
10  1   203005  310
11  1   203006  310
12  1   203009  310
13  13  202909  290
14  13  202902  290
15  13  202801  290
  • dense_rank-over()
    按每个ymdate的dvalue统计值倒序,ymdate升序进行连续性排名
    注意:因为使用dvalue统计值倒序,ymdate升序进行排序后没有相同的统计结果,所有排序结果与’rank()-over()按每个ymdate的dvalue统计值倒序,ymdate升序进行非连续性排名’一致。
Select dense_rank() over(Order By Sum(dvalue) Desc, ymdate) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   203001  310
2   2   203002  310
3   3   203003  310
4   4   203004  310
5   5   203005  310
6   6   203006  310
7   7   203007  310
8   8   203008  310
9   9   203009  310
10  10  203010  310
11  11  203011  310
12  12  203012  310
13  13  202801  290
14  14  202802  290
15  15  202803  290

按每个ymdate的dvalue统计值倒序进行连续性排名

Select dense_rank() over(Order By Sum(dvalue) Desc, ymdate) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   203001  310
2   1   203004  310
3   1   203002  310
4   1   203012  310
5   1   203011  310
6   1   203007  310
7   1   203010  310
8   1   203008  310
9   1   203003  310
10  1   203005  310
11  1   203006  310
12  1   203009  310
13  2   202909  290
14  2   202902  290
15  2   202801  290
  • rank()-over(partition by)
    划定排序的数据范围为ymdate所在的年份,并按照每个ymdate的dvalue统计值倒序进行非连续性排名
    注意:因为人造数据的问题每年度的每个ymdate数值一致所以看不出统计排名效果
Select rank() over(Partition By trunc(ymdate / 100) Order By Sum(dvalue) Desc) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   202102  210
2   1   202106  210
3   1   202109  210
4   1   202105  210
5   1   202107  210
6   1   202108  210
7   1   202111  210
8   1   202101  210
9   1   202112  210
10  1   202103  210
11  1   202104  210
12  1   202110  210
13  1   202212  230
14  1   202201  230
15  1   202206  230
  • dense_rank-over(partition by)
    划定排序的数据范围为ymdate所在的年份,并按照每个ymdate的dvalue统计值倒序进行连续性排名
    注意:因为人造数据的问题每年度的每个ymdate数值一致所以看不出统计排名效果
Select dense_rank() over(Partition By trunc(ymdate / 100) Order By Sum(dvalue) Desc) rankid,ymdate,Sum(dvalue) dvalueFrom test_lagoverGroup By ymdate
# 结果
1   1   202102  210
2   1   202106  210
3   1   202109  210
4   1   202105  210
5   1   202107  210
6   1   202108  210
7   1   202111  210
8   1   202101  210
9   1   202112  210
10  1   202103  210
11  1   202104  210
12  1   202110  210
13  1   202212  230
14  1   202201  230
15  1   202206  230

Oracle笔记 之 分组统计排名函数dense_rank/rank()-over()函数相关推荐

  1. oracle多条件分组统计_多条件统计,就必须用Ifs系列函数,绝对的高能!

    数据统计,我们并不陌生,但是在实际的工作或应用中,数据统计都是附加条件的,而且大多情况下是"多条件"的,此时,我们必须掌握"Ifs"系列函数. 一.多条件判断: ...

  2. 《卸甲笔记》-分组统计查询对比

    统计函数对比 1查询出公司每个月支出的月工资总和 Oracle SQL> select SUM(sal) from emp;SUM(SAL) ----------29025 PPAS scott ...

  3. db2 replace函数的用法_Excel函数快速入门教程

    本教程通过简单的案例来学习Excel函数,不同于以往的按字母顺序排序进行讲解,而是按作者使用Excel的经验来对函数进行排序,每部分越靠前的函数说明使用频率越高.所有操作均在Excel 2016中进行 ...

  4. Oracle 数据库数据排名函数:rank() 和dense_rank() 。

    Oracle 数据库数据排名函数:  rank() 和dense_rank() . --------------------------------------------间断排名(也称强制排名)   ...

  5. Oracle学习笔记(七)——分组统计查询

    Oracle学习笔记(七)--分组统计查询 基础统计函数的使用 分组统计操作的实现,结合多表查询使用分组统计 常用统计函数 COUNT(*|[DISTINCT]字段) MAX(字段,日期或数字) MI ...

  6. Oracle中rank() over()函数排名

    --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应函数:dense_rank,rank 查询原始数据:学号.姓名.科目名.成绩 select ...

  7. 第一篇博客-Sql排名函数DENSE_RANK

    Sql排名函数☞DENSE_RANK 1.DENSE_RANK函数介绍 dense_rank函数用于返回结果集的分区内每行的排名,函数考虑到了over子句中排序字段值相同的情况,over子句中排序字段 ...

  8. Oracle取排序的第五条数据,OVER(PARTITION BY)函数介绍 【oracle中按A分组按B排序,再取B中第一条数据的查询】...

    目录 一.小案例: school表中有①id 序号②class 班级 ③score成绩 三个字段, 使用oracle实现按照班级分区,然后取班级中的第一名. 1.1测试数据如下: --创建学校表sch ...

  9. oracle的高级分组函数,group by 高级函数使用

    在使用group by常用的基本函数包括min,max,avg,sum,count等,除了基本函数oracle中提供了一些高级分组函数, Rollup,Cube,Grouping,Grouping s ...

最新文章

  1. modelsim的destbench模型1
  2. 详细谈电脑ip、域名、内网、外网、localhost、127.0.0.1、网关等通讯基础知识(易懂)
  3. 高效JQuery编码
  4. python import from class_Python: import vs from (module) import function(class) 的理解
  5. android qq分享自动弹出,史上最详细Android集成QQ,微信,微博分享(不要第三方)持续更新中...
  6. java集群_身为Java程序员的你知道分布式与集群的联系及区别吗?
  7. IBASE read header
  8. 笑谈软件工程:烽烟中的敏捷
  9. 解决layui laydate动态创建多个时不起作用点击无效的问题
  10. java magnolia,java – Magnolia富文本字段
  11. python预测发展趋势_Python预测算法哪家强?权游龙妈是生还是凉凉?
  12. SpringBoot 学习二:操作数据库
  13. 矩池云安装利用pip、apt、conda安装需要的包
  14. Silverlight 2.5D RPG游戏技巧与特“.NET技术”效处理:(十一)AI系统
  15. 搜款网根据关键词取商品列表 API 返回值说明
  16. 我想用人工智能留住父亲
  17. 《视觉SLAM十四讲》读书笔记(四)
  18. 风陵渡口初相遇,一见杨过误终身
  19. Windows 连接了网络浏览器不能上网
  20. webrtc录制视频

热门文章

  1. 林云会研究院参加“创新大前端 研发新思路”线下技术沙龙活动
  2. 现在不是情绪最低落的时候
  3. 个人下载mysql什么版本_Mysql各个版本区别及官网下载
  4. Mp3播放器获取艺术家专辑头像、歌手、歌曲信息的方法
  5. [面经整理](机器/深度学习篇)
  6. 传统图像处理之随机脉冲噪声检测
  7. AIR724UG 紫光展锐 音频调参
  8. 2019年vivo提前批开发岗笔试
  9. 【深度学习】【CVPR2019 oral】Structured Knowledge Distillation for Semantic Segmentation
  10. 风控模型A卡申请评分卡,toad包实例