【问题标题】:Assign same group number for N-members in SQL Oracle在 SQL Oracle 中为 N 个成员分配相同的组号
【发布时间】:2021-09-15 03:54:56
【问题描述】:

假设我只有一列不同的代码,例如

Code
A
B
.
.
.
Z

我需要添加带有组号的新列,并且我需要它是动态的,这意味着有时我需要 10 个成员组,另一次需要 5 个成员组,因此 5 个成员组的输出看起来像这样

code  group
A     1
B     1
C     1
D     1
E     1
F     2
G     2
H     2
I     2
J     2
K     3
.
.
.

当然,我可以过滤代码,所以如果我有 7 个过滤代码,它可能会像这样结束

code   group
A      1
D      1
E      1
F      1
K      1
S      2
Z      2

【问题讨论】:

    标签: sql oracle grouping oracle12c oracle19c


    【解决方案1】:

    我建议在row_number() 上使用算术。例如,对于长度为 5 的组:

    select t.*,
           ceiling(row_number() over (order by code) / 5) as grp
    from t;
    

    如果你想要 5 个组,那么你ntile()。

    【讨论】:

      【解决方案2】:

      NTILE 分析函数,我会说。第 1 - 5 行中的示例数据,查询从第 6 行开始。

      SQL> with test (code) as
        2    (select chr(65 + level - 1)
        3     from dual
        4     connect by level <= 26
        5    )
        6  select code,
        7         ntile(5) over (order by code) grp   --> "5" says how many groups you want
        8  from test
        9  order by code;
      
      CODE        GRP
      ---- ----------
      A             1
      B             1
      C             1
      D             1
      E             1
      F             1
      G             2
      H             2
      I             2
      J             2
      K             2
      L             3
      M             3
      N             3
      O             3
      P             3
      Q             4
      R             4
      S             4
      T             4
      U             4
      V             5
      W             5
      X             5
      Y             5
      Z             5
      
      26 rows selected.
      
      SQL>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        相关资源
        最近更新 更多