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

如何在BigQuery中将多行合并为含有序去重值的单行?

解决BigQuery多行数据合并为单行的问题

我来帮你搞定这个多行合并的需求!首先梳理下你的问题:你想按A和B分组,把同一组里的C(示例里都是math)保留为单个值,D列合并去重后的内容,但之前的代码因为窗口函数的误用和语法问题,导致结果不符合预期还报错。

错误原因分析

你之前用了group_concat(unique(C),",") over(partition by A, B ORDER BY C)这类写法,问题主要出在两点:

  1. 窗口函数的特性:OVER()子句是用来对每行数据做计算的,不会把整个分组聚合为一行,所以会重复输出C的值;
  2. 语法与函数选择:BigQuery里更推荐使用标准的STRING_AGG函数来合并字符串,而且去重应该用DISTINCT关键字,unique不是BigQuery的标准用法,这也是报错的原因之一。

正确的SQL写法

根据你的需求,我们需要用GROUP BY来做分组聚合,而不是窗口函数。因为示例中同一A、B分组下C的值都是math,所以可以用ANY_VALUE(或者MAX/MIN,结果都一致)来保留单个C值;D列则用STRING_AGG(DISTINCT D, ', ')来合并去重后的内容:

SELECT
  A,
  B,
  ANY_VALUE(C) AS C,
  STRING_AGG(DISTINCT D, ', ') AS D
FROM
  `你的项目名.数据集名.目标表名`
GROUP BY
  A, B
ORDER BY
  A, B

如果你的实际场景中,同一A、B分组下C可能有多个不同值,想要合并去重的C,只需要把C的部分改成STRING_AGG(DISTINCT C, ', ') AS C即可。

执行这段SQL后,就能得到你期望的结果:

A | B | C | D
09-10-2019 | 1 | math | science, social

内容的提问来源于stack exchange,提问作者Fairuz Yassar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:25:55