在 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()
.
假设我只有一列不同的代码,例如
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()
.