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

问题描述 投票:-1回答:2

我试图按照我在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

sql oracle plsql group-by
2个回答
1
投票
select Foil_Keys, count(Foil_Keys) FCNT from Table(FOIL_MAP) group by Foil_Keys
order by foil_keys desc

1
投票

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

不,我很抱歉,但没有。

您希望按照插入表中的顺序返回数据。返回行时,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);
© www.soinside.com 2019 - 2024. All rights reserved.