【问题标题】:Increment row number on group with repeated groups在具有重复组的组上增加行号
【发布时间】:2018-05-14 05:07:38
【问题描述】:

我正在处理 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

如果我使用 DENSE_RANK 函数按 Shade 排序,我无法保持原来的顺序,这就是我得到的:

Group | Shade | Amount
----------------------
1     | A     | 6
2     | B     | 3

分组时如何保持原来的分组模式?

【问题讨论】:

    标签: sql oracle group-by dense-rank


    【解决方案1】:

    您可以使用行号的差异来定义组:

    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() 值之间的差异标识了顺序组。

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2021-09-29
      • 2022-01-24
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多