我正在研究PLSQL(Oracle 12)的查询,其中我需要增加每个组的数据集的行号。
我的问题类似于这个问题(Increment Row Number on Group)。但是,我的情况略有不同。我在数据上重复了相同的 shade ,我希望在分组时保留原始顺序。
以下数据
Level | Shade
-------------
1 | A
2 | A
3 | A
4 | B
5 | B
6 | B
7 | A
8 | A
9 | A
我想得到以下结果
Group | Shade | Amount
----------------------
1 | A | 3
2 | B | 3
3 | A | 3
如果我使用 Shade 的DENSE_RANK函数排序,我无法保留原始订单,这就是我得到的:
Group | Shade | Amount
----------------------
1 | A | 6
2 | B | 3
分组时如何保留原始组模式?
答案 0 :(得分:2)
您可以使用行号的差异来定义组:
select Shade, count(*) as amount
from (select t.*,
row_number() over (order by level) as seqnum,
row_number() over (partition by shade order by level) as seqnum_s
from t
) t
group by Shade, (seqnum - seqnum_s);
有点难以解释为什么会这样。如果查看子查询的结果,很明显为什么两个row_number()
值之间的差异可以识别顺序组。