在 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 计数没有间隙,则 NGROUP_ID 的通用公式为:(GROUP - 1) / N + 1.
如果你确实有差距,你可以使用 dense_rank() over (order by group) 而不是 GROUP