Oracle group by子句按数据顺序排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle group by子句按数据顺序排列相关的知识,希望对你有一定的参考价值。

我试图按照我在PL / SQL过程中收到的特定顺序对下面的数据进行分组。自定义表类型FOIL_MAP在我的过程中填充,当前包含如下所示的数据:

https://i.stack.imgur.com/ovZEQ.png

我写了这个查询:

select Foil_Keys, count(Foil_Keys) FCNT from Table(FOIL_MAP) group by Foil_Keys;

我得到了输出:

https://i.stack.imgur.com/Xe6z7.png

有没有办法让group by子句按照给出的确切顺序返回数据!如下图所示?

https://i.stack.imgur.com/e06Lj.png

答案
select Foil_Keys, count(Foil_Keys) FCNT from Table(FOIL_MAP) group by Foil_Keys
order by foil_keys desc
另一答案

...按照在...中给出的确切顺序返回数据

不,我很抱歉,但没有。

您希望按照插入表中的顺序返回数据。返回行时,SQL标准未指定任何顺序。数据库可以按任何顺序返回数据,这没关系;订单甚至可能会及时改变。现在,如果您想要任何特定订单,您需要使用ORDER BY

额外柱的替代解决方案

无论如何,如果要按插入顺序返回数据,则需要在表中添加一个额外的列来表示数据插入的日期/时间。如果您这样做,您可以按该列排序。

如果时间戳列不够好,因为插入的粒度很小(因此值可能会发生碰撞),那么您可以使用序列。

alter table foil_map add (my_order decimal(12) not null);

create sequence insert_order_seq;

当插入表格时:

insert into foil_map (col1, col2, ..., my_order)
  values (val1, val2, ..., insert_order_seq.nextval);

并且您的查询将变为:

select foil_keys, count(foil_keys) fcnt 
  from foil_map 
  group by foil_keys 
  order by max(my_order);

以上是关于Oracle group by子句按数据顺序排列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql中ORDER BY 排序怎么使用?指定顺序和多字段排列

Oracle_group by分组查询_深入

Oracle Order By排序用法详解

Oracle Order By排序用法详解

oracle数据库GROUP BY 子句

oracle中group by用法