Oracle如何分组排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle如何分组排序?相关的知识,希望对你有一定的参考价值。

我用rollup和grouping生成了小计/合计行,然后想将数据按照时间倒序输出该怎么写。
我直接用order by会将小计行堆到一起。

参考技术A 最简单的上子查询即可:
select * from (原有SQL语句) order by 对应列名
参考技术B 给个建议,先order by排序 然后再生成了小计/合计行。追问

我试过,先用order by排好序,然后后面写rollup再运行顺序又变回去了

追答

可以试一试
(1)试验:你用order by以后的数据建立一个新表,这时新表的数据应该就是order by以后的,然后试一试rollup,这时有两种可能一种是可以,一种是不可以。

(2)如果可以,那么就可以尝试临时表了,就是每次查询前建立临时表(可以用存储过程或者包的方式自动实现),或者将数据以排好序的形式灌入临时表,然后在查询。(当然,额如果行的话视图没准也可以,不过为了查询快捷可能要建立物化视图)
(3)如果还不行,那就要麻烦一些,不知道开窗函数能不能做,需要试验了,不过就算能做也会有些麻烦,好不如直接用某些软件来的快。

ORACLE分组排序查询

有一个表,A字段为唯一标示,B字段有重复数据,现在我想以B字段分组,以C字段显示每组的每条记录的子序号从“1”开始往后排。我这张表的数据很大,如果用row_number(),rank()这种函数可以实现,但是查询速度相当慢。哪位能提供一个快速的查询方法,句子多复杂都没事,只要求快。

row_number(),rank()是分析函数,是实现这种需求最高效的方法
你需要大表的排序,速度肯定不会快到哪里去
建议你对需要排序的字段先创建一个索引,会快很多很多
发放依然还是用row_number(),这个比较好
参考技术A 按照你说的功能部分估计只能是
select row_number() as A, B, rank() as C

from yourtable
group by B;
查询速度优化只能优先从数据过滤方面着手

以上是关于Oracle如何分组排序?的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE分组排序查询

oracle里面怎么多个字段分组排序

如何对DevExpress ASPxGridView进行分组排序

SQL如何对分组后的结果进行排序并且取前几名

关于oracle分组排序取值的问题

Oracle性能优化 对于分组排序的算法优化