在 SQL 中创建组 ID
Posted
技术标签:
【中文标题】在 SQL 中创建组 ID【英文标题】:Create Group ID in SQL 【发布时间】:2021-06-01 16:04:02 【问题描述】:我有一张桌子,例如:
GROUP | STUDENT | GRADE |
---|---|---|
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 | GROUP | STUDENT | GRADE |
---|---|---|---|
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 |
【问题讨论】:
请注意:group
是 SQL 中的关键字,可能不应该用作列名。
即使是保留关键字...
【参考方案1】:
你可以使用算术:
select ceiling(groupcol / 2.0)
如果你的groupcol
有空格,那么你可以使用dense_rank()
:
select ceiling(dense_rank() over (order by groupcol) / 2.0)
【讨论】:
我有一个未排序的 groupcol,可以假设任何整数值,ceiling
可以吗?【参考方案2】:
如果GROUP
计数没有间隙,则任何N
的通用公式为GROUP_ID
是:(GROUP - 1) / N + 1
。
如果确实有差距,您可以使用dense_rank() over (order by group)
而不是GROUP
。
【讨论】:
以上是关于在 SQL 中创建组 ID的主要内容,如果未能解决你的问题,请参考以下文章