在 SQL 中创建组 ID
Create Group ID in SQL
我有一个 table 例如:
群组
学生
等级
1
1
10
1
2
8
1
3
10
2
1
7
2
2
8
3
1
5
4
1
9
4
2
8
4
3
9
4
4
8
5
1
3
5
2
2
6
1
10
组的长度不同。
如何为 SQL 中变量 GROUP
的每 2 个类别(或 n)分配一个组 ID 以获得列 GROUP_ID
,例如:
GROUP_ID
群组
学生
等级
1
1
1
10
1
1
2
8
1
1
3
10
1
2
1
7
1
2
2
8
2
3
1
5
2
4
1
9
2
4
2
8
2
4
3
9
2
4
4
8
3
5
1
3
3
5
2
2
3
6
1
10
你可以使用算术:
select ceiling(groupcol / 2.0)
如果你的groupcol
有差距,那么你可以使用dense_rank()
:
select ceiling(dense_rank() over (order by groupcol) / 2.0)
如果 GROUP
计数没有间隙,则 N
对 GROUP_ID
的通用公式为:(GROUP - 1) / N + 1
.
如果你确实有差距,你可以使用 dense_rank() over (order by group)
而不是 GROUP
。
我有一个 table 例如:
群组 | 学生 | 等级 |
---|---|---|
1 | 1 | 10 |
1 | 2 | 8 |
1 | 3 | 10 |
2 | 1 | 7 |
2 | 2 | 8 |
3 | 1 | 5 |
4 | 1 | 9 |
4 | 2 | 8 |
4 | 3 | 9 |
4 | 4 | 8 |
5 | 1 | 3 |
5 | 2 | 2 |
6 | 1 | 10 |
组的长度不同。
如何为 SQL 中变量 GROUP
的每 2 个类别(或 n)分配一个组 ID 以获得列 GROUP_ID
,例如:
GROUP_ID | 群组 | 学生 | 等级 |
---|---|---|---|
1 | 1 | 1 | 10 |
1 | 1 | 2 | 8 |
1 | 1 | 3 | 10 |
1 | 2 | 1 | 7 |
1 | 2 | 2 | 8 |
2 | 3 | 1 | 5 |
2 | 4 | 1 | 9 |
2 | 4 | 2 | 8 |
2 | 4 | 3 | 9 |
2 | 4 | 4 | 8 |
3 | 5 | 1 | 3 |
3 | 5 | 2 | 2 |
3 | 6 | 1 | 10 |
你可以使用算术:
select ceiling(groupcol / 2.0)
如果你的groupcol
有差距,那么你可以使用dense_rank()
:
select ceiling(dense_rank() over (order by groupcol) / 2.0)
如果 GROUP
计数没有间隙,则 N
对 GROUP_ID
的通用公式为:(GROUP - 1) / N + 1
.
如果你确实有差距,你可以使用 dense_rank() over (order by group)
而不是 GROUP
。