You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在BigQuery中执行UNNEST操作时如何正确设置row_number?

解决拆分字符串并生成正确顺序行号的问题

嗨,我来帮你搞定这个行号不对的问题!

你之前的写法问题出在PARTITION BY fruit上——这个子句会把相同的水果名称分到同一个组里计算行号,这完全不是你想要的逻辑。你需要的是,针对原数据行里拆分出来的每个水果,按照它们在原字符串里的顺序生成递增的行号对吧?

这里有两个简单靠谱的方案:

方案1:用UNNEST ... WITH OFFSET直接获取位置

UNNEST配合WITH OFFSET可以直接拿到每个拆分元素在原数组里的索引(从0开始),加1就是你要的行号:

SELECT
  fruit,
  pos + 1 AS row_number
FROM your_table,
UNNEST(SPLIT(fruits)) WITH OFFSET pos AS fruit

方案2:基于原行分区+按位置排序

如果你的表有唯一主键(比如id),可以用ROW_NUMBER()结合原行分区,同时按拆分的位置排序,这样能保证行号严格对应原字符串的顺序:

SELECT
  fruit,
  ROW_NUMBER() OVER(PARTITION BY id ORDER BY pos) AS row_number
FROM your_table,
UNNEST(SPLIT(fruits)) WITH OFFSET pos AS fruit

为什么这两个方案能解决问题?

不管用哪种方法,核心都是基于原字符串的拆分顺序来计算行号,而不是按水果名称分组。比如原数据是apple, orange,拆分后apple的pos是0,orange是1,对应的行号就是1和2,完美符合你的需求。

内容的提问来源于stack exchange,提问作者Dmitry Mostyka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:32:33