oracle中按数字大小排序函数,oracle中分组排序函数用法
项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:
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,数据如下
显示数据CREATEDATE ACCNO MONEY
2014/6/5 111 200
2014/6/4 111 600
2014/6/5 111 400
2014/6/6 111 300
2014/6/6 222 200
2014/6/5 222 800
2014/6/6 222 500
2014/6/7 222 100
2014/6/6 333 800
2014/6/7 333 500
2014/6/8 333 200
2014/6/9 333 0
比如要根据ACCNO分组,并且每组按照CREATEDATE排序,是组内排序,并不是所有的数据统一排序,
用下列语句实现:
Sql代码select t.*,row_number() over(partition by accno order by createDate) row_number from Test t
查询结果如下:
大家可以注意到ACCNO为111的记录有两个相同的CREATEDATE,用row_number函数,他们的组内计数是连续唯一的,但是如果用rank或者dense_rank函数,效果就不一样,如下:
rank的sql:
Sql代码select t.*,rank() over(partition by accno order by createDate) rank from Test t
查询结果:
可以发现相同CREATEDATE的两条记录是两个第2时接下来就是第4.
dense_rank的sql:
Sql代码select t.*,dense_rank() over(partition by accno order by createDate) dense_rank from Test t
查询结果:
可以发现相同CREATEDATE的两个字段是两个第2时接下来就是第3.
项目中特殊的业务需求可能会要求用以上三个不同的函数,具体情况具体对待。
再比如有时会要求分组排序后分别取出各组内前多少的数据记录,sql如下:
Sql代码select createDate,accno,money,row_number from (select t.*,row_number() over(partition by accno order by createDate) row_number from Test t) t1 where row_number<4
oracle中按数字大小排序函数,oracle中分组排序函数用法相关推荐
- 如何根据字典中值的大小,对字典中的项排序
如何根据字典中值的大小,对字典中的项排序 sorted(dict2.iteritems(),key=lambda item:item[1],reverse=True) 使用内置函数sorted 1. ...
- mac电脑怎样修改cad标注尺寸中的数字大小?
安装完CAD后,在使用过程中你发现尺寸标注中的数字太小,想要看清标注尺寸的话需要放大图纸才可以,对于我们的工作而言就会很繁琐,如果此时你也想要将数字字号调大些,却又不知如何操作?快来跟小编学习一下吧! ...
- php 取字符串中的字母数字,php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码)...
本篇文章给大家带来的内容是关于php如何提取字符串中的数字?php提取字符串中数字的方法总结(附代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. PHP提取字符串中的第一组数字 ...
- python3提取字符串中的数字_如何在Python中从字符串中提取数字?
14 回复 | 直到 1 年前 1 430 3 年前 如果只想提取正整数,请尝试以下操作: >>> str = "h3110 23 cat 444.4 rabbit 11 ...
- 假想面试题:现在有一串字符串2, 2, 3……,其中字符串中的数字类似于Word文档中的标题级别,最终效果是让它们按照Word文档导航窗格中的标题级别格式进行展示
目录 一.问题 二.答案 1.依赖 2.代码 3.结果 4.思路分析 三.拓展 1.反向思维 2.引用数据类型 四.实战 1.背景 2.实战模拟 2.1.代码 2.2.结果 一.问题 现在有一串字符串 ...
- python数字排序_python按照列表元素中的数字大小排序
[Human Sorting] 常见的python排序只需要一个sort或者sorted函数即可.但是默认采用的是字典序,这会带来一个问题,如果列表中的元素是字符串+数字组合,往往无法得到我们想要的排 ...
- python数字大小排列_python按照列表元素中的数字大小排序
[Human Sorting] 常见的python排序只需要一个sort或者sorted函数即可.但是默认采用的是字典序,这会带来一个问题,如果列表中的元素是字符串+数字组合,往往无法得到我们想要的排 ...
- Excel中按照数字和汉字列对所有列排序
今天学医的一个同学发消息说他那大量的Excel的数据想按照数字和汉字那一列数据进行排序,但是不知道怎么操作,于是我就自己给他制作了了比较粗糙的操作教程,希望能够帮助到需要帮助的人吧.也欢迎有较好的方法 ...
- Hibernate三种状态;query查询;ResultTransformer转换为pojo对象;可以将query语句写在xml中;Criteria查询;ProjectionList总和/f分组等函数
Session操作过程中的pojo对象存在三种状态: 1) 瞬时态:该对象在数据库中没有对应的数据 2) 持久态:数据库中存在该对象对应的数据,同时操作该对象的Session也存在. 3) 游离 ...
最新文章
- 用python解“12-24小时制”题
- 张亚勤:对于产业来讲,深度学习的黄金时代刚刚开始
- numpy 笔记: random模块
- Elastic Search 上市了,Slack上市了,我也要写个软件,走上人生巅峰
- 5 日期范围查询_MySQL(四)——复杂查询
- linux 读写时间变长,linux时钟变慢的原因分析【转】
- [渝粤教育] 西南财经大学 货币金融学 参考 资料
- firefox 和 ie 事件处理的细节,研究,再研究-----书写同时兼容ie和ff的事件处理代码...
- Python的多行输入与多行输出
- 用java制作心理测试软件_Java 程序员必备的10款开源工具
- Vue 过滤器/watch/computed
- win10计算机内存,win10多大内存够用 win10系统需要多大的运行内存
- oj-杭电 熊猫阿波的故事
- 《码农翻身》原文分章节阅读链接
- 电路课组(一)电路原理 Review 1 线性电路分析基础
- 数据中台常用术语整理
- iOS Safari阅读模式分析过程
- Shell实战--文件安全性的保证
- Gitbook制作PDF电子书
- php中until的用法,until用法解析(完美篇)