在 SQL Oracle 中为 N 个成员分配相同的组号

Assign same group number for N-members in SQL Oracle

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

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

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>

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

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

如果你想要 5 ,那么你 ntile().