首页 > 解决方案 > 我想根据组在我的查询中给出序列号

问题描述

根据我的以下查询,它按数据打印分组,但我想为第一组 1、2、3 和下一组 1、2、3 提供每组的 seq 序列号。

我该如何为这个查询编写它?

select tour_no, version_no ,itinerary_detail_no 
from  itinerary_detail 
group by tour_no, version_no, itinerary_detail_no 
order by  count(*) desc

标签: sqloraclegroup-by

解决方案


您可以为每一行生成一个序列号,如下所示:

select
  tour_no, version_no, itinerary_detail_no,
  row_number()
    over(order by cnt desc, tour_no, version_no, itinerary_detail_no) as rn
from (
  select tour_no, version_no, itinerary_detail_no, count(*) as cnt
  from itinerary_detail 
  group by tour_no, version_no, itinerary_detail_no
) x
order by cnt desc, tour_no, version_no, itinerary_detail_no

结果:

TOUR_NO  VERSION_NO  ITINERARY_DETAIL_NO  RN
-------  ----------  -------------------  --
1                17                    5   1
1                10                    5   2
2                10                    5   3 
3                10                    5   4 

作为参考,这个测试的数据脚本是:

create table itinerary_detail (
  tour_no number(6),
  version_no number(6),
  itinerary_detail_no number(6)
);

insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (1, 17, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (2, 10, 5);
insert into itinerary_detail (tour_no, version_no, itinerary_detail_no) values (3, 10, 5);

**Tour_No Ver_No IT_No Seq_No JAA0000197 01 17037249 1 JAA0000197 01 17037250 2 JAA0000197 02 17037249 1 JAA0000197 02 17037250 2 JAA0000197 02 170372

这里 group by 是 (Tour_No,ver_No) 所以上面的数据我希望每个组都从 1 到 2 开始,然后继续,下一组再次相同


推荐阅读