项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1、要求取出按field1分组后,并在每组中按照field2排序;2、亦或更加要求取出1中已经分组排序好的前多少行的数据

这里通过一张表的示例和sql语句阐述下oracle数据库中用于分组排序函数的用法。

a、row_number() over()

row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。

与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码。row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开始排序)。

b、rank() over()

rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)

c、dense_rank() over()

dense_rank()也是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的。

示例:

如有表Test,数据如下

Java代码

CREATEDATEACCNOMONEY

2014/6/5111200

2014/6/4111600

2014/6/5111400

2014/6/6111300

2014/6/6222200

2014/6/5222800

2014/6/6222500

2014/6/7222100

2014/6/6333800

2014/6/7333500

2014/6/8333200

2014/6/93330

比如要根据ACCNO分组,并且每组按照CREATEDATE排序,是组内排序,并不是所有的数据统一排序,

用下列语句实现:

selectt.*,row_number()over(partitionbyaccnoorderbycreateDate)row_numberfromTestt

查询结果如下:

大家可以注意到ACCNO为111的记录有两个相同的CREATEDATE,用row_number函数,他们的组内计数是连续唯一的,但是如果用rank或者dense_rank函数,效果就不一样,如下:

rank的sql:

selectt.*,rank()over(partitionbyaccnoorderbycreateDate)rankfromTestt

查询结果:

可以发现相同CREATEDATE的两条记录是两个第2时接下来就是第4.

dense_rank的sql:

selectt.*,dense_rank()over(partitionbyaccnoorderbycreateDate)dense_rankfromTestt

查询结果:

可以发现相同CREATEDATE的两个字段是两个第2时接下来就是第3.

项目中特殊的业务需求可能会要求用以上三个不同的函数,具体情况具体对待。

再比如有时会要求分组排序后分别取出各组内前多少的数据记录,sql如下:

selectcreateDate,accno,money,row_numberfrom(selectt.*,row_number()over(partitionbyaccnoorderbycreateDate)row_numberfromTestt)t1whererow_number<4

查询结果如下:

总结

以上是编程之家为你收集整理的oracle中分组排序函数用法全部内容,希望文章能够帮你解决oracle中分组排序函数用法所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

oracle分类函数总结,oracle中分组排序函数用法相关推荐

  1. oracle 条件排序函数,oracle中分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  2. oracle中按数字大小排序函数,oracle中分组排序函数用法

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如: 1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的 ...

  3. oracle求和分组排序,oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  4. list对oracle结果集排序了_详解SQL窗口函数和分组排序函数

    Mysql从8.0版本开始,也和Sql Server.Oracle一样支持在查询中使用窗口函数,本文将根据官方文档,通过实例介绍窗口函数并举例分组排序函数的使用. 英语好的大佬请移步官方文档~点我! ...

  5. Oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况: 1.要求取出按field1分组后,并在每组中按照field2排序: 2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

  6. Oracle中to_char函数和MySQL中的str_to_date函数区别

    标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...

  7. C++中sort()排序函数应用

    ** C++中sort()排序函数应用 ** sort(first_pointer,first_pointer+n,cmp) 该函数可给数组,或者链表list.向量排序. 实现原理:sort并不是简单 ...

  8. SQL中的排序函数【row_number() 、rank() 、dense_rank() 】

    一.SQL中有三种排序函数 1.row_number() over(order by 列名) 2.rank() over(order by 列名) 3.dense_rank() over(order ...

  9. Python中的排序函数

    Python中的排序函数 列表排序 sort函数 sort函数: list.sort(cmp=None,key=None,reverse=False) 对原列表进行排序,完成排序后,原列表变为有序列表 ...

最新文章

  1. Aiiage Camp Day5 A Rikka with Linker
  2. 对话Linus Torvalds:大多黑客甚至连指针都未理解
  3. Spring Integration 4.3.10 发布,Spring 消息通信
  4. 利用素数表快速寻找 n 以内的所有素数
  5. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法
  6. Java线程新特征——Java并发库
  7. .net npoi xssfclientanchor设置图片缩放大小_.NET导出Excel的四种方法及评测
  8. 14英寸电脑长宽多少_连接4K显示器流行,带雷电3雷电4接口的笔记本要多少钱?...
  9. UEditor编辑器第一次赋值失败的解决方法
  10. SpringBoot 扫描包
  11. 单处理机系统的进程调度实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab3进程与异常(一)...
  12. 5·19网络故障:DNS服务器被攻击
  13. Android基本界面控件六-进度条
  14. 485转4-20mA信号转换0-10v5v电压电流采集模块
  15. 罗技K380使用手册
  16. Vue组件库 View UI 来看看这80种奇奇怪怪的按钮
  17. PFC中各服务对象使用说明
  18. 使用示波器调试李萨如图象
  19. 为什么使用指针变量时一定要申请空间?
  20. 安全漏洞修复-Common FileUpload-CVE-2016-100031

热门文章

  1. 星际战甲服务器维护时间,星际战甲:6月17日内容更新 停机维护公告
  2. 半年使用静电容键盘的感受(宁芝)
  3. Tomcat 基于APR的本地库加载失败
  4. Java随堂小记05
  5. res.data.xxx undefined
  6. 第6版PMBOK,PMP备考(组织过程资产)
  7. PMP之事业环境因素以及组织过程资产学习
  8. 【自然语言处理】【chatGPT系列】大语言模型可以自我改进
  9. 【吴恩达deeplearning.ai】基于LangChain开发大语言应用模型(上)
  10. elementUI中分页器的使用