我有一个类似这样的表:
| id
|values
|
| - ------|- ------|
| 1
|a
|
| 2
|b
|
| 3
|c
|
| 4
|d
|
| 5
|x1米11米1x|
| 6
|f
|
我需要生成group_id列,以便能够使用
select collect_list(values) from table group by group_id
例如,对于batchSize = 2
| id
|values
|group_id
|
| - ------|- ------|- ------|
| 1
|a
|1
|
| x1米20英寸1x|b
|1
|
| 3
|c
|2
|
| 4
|d
|2
|
| 5
|x1米30英寸1x|3
|
| 6
|f
|3
|
把它取出来
| group_id
|collect_list(values)
|
| - ------|- ------|
| 1
|[a, b]
|
| x1米39英寸|x1米40英寸1x|
| 3
|[e, f]
|
或者,对于batchSize = 3
| id
|values
|group_id
|
| - ------|- ------|- ------|
| 1
|a
|1
|
| 2
|x1米50英寸|1
|
| 3
|c
|1
|
| 4
|d
|2
|
| 5
|e
|x1米60英寸1x|
| 6
|f
|2
|
出局
| group_id
|collect_list(values)
|
| - ------|- ------|
| 1
|[a, b, c]
|
| 2
|[d, e, f]
|
如何生成该列group_id以便收集值并按group_id分组?
2条答案
按热度按时间cedebl8k1#
您可以使用row_number和DIV生成group_id
为了扩展我的答案,我们使用Integer division属性来获取组ID
Row_number将给予从1到N的连续数字
但是我们需要数字从0开始,所以我们从行号中减去1
这可以证明对所有无穷大的整数都是正确的
由于group_id必须以1开头(实际上不是必需的),我们需要向结果中添加另一个1
使用生成的Group-id之后,您可以通过
collect_list(values)
tpo获取您的数组| 身份证|价值观|组标识|
| - ------|- ------|- ------|
| 1个|项目a|1个|
| 第二章|B|1个|
| 三个|(c)秘书长的报告|1个|
| 四个|日|第二章|
| 五个|电子|第二章|
| 六个|f级|第二章|
| 七|克|三个|
| 八个|小时|三个|
| 九|我|三个|
| 身份证|价值观|组标识|
| - ------|- ------|- ------|
| 1个|项目a|1个|
| 第二章|B|1个|
| 三个|(c)秘书长的报告|第二章|
| 四个|日|第二章|
| 五个|电子|三个|
| 六个|f级|三个|
| 七|克|四个|
| 八个|小时|四个|
| 九|我|五个|
iugsix8n2#
据我所知,你想做的是把你的选择分块。
那么这个应该可以了:https://stackoverflow.com/a/29975781/21188126