BigQuery中如何在单次聚合操作中合并数组并保留唯一值?
单次聚合实现数组去重合并与数值求和
你可以用array_concat_agg配合array_distinct,在一次GROUP BY操作里同时完成数组去重合并和y字段求和,无需拆成两个子查询再关联,优化后的SQL如下:
WITH source AS ( SELECT [1, 2, 3, 4] AS x, 10 AS y, 'john' AS name UNION ALL SELECT [3, 4, 5, 6], 3.3, 'john' UNION ALL SELECT [7, 8, 9], 12.7, 'jacob' ) SELECT name, array_distinct(array_concat_agg(x)) AS distinct_x_array, SUM(y) AS sum_y FROM source GROUP BY name
逻辑说明:
array_concat_agg(x):将同一个name对应的所有x数组拼接成一个包含重复元素的大数组array_distinct(...):对拼接后的大数组去重,最终得到和原查询中array_agg(distinct x)完全一致的唯一值数组SUM(y):直接对每个name的y字段求和,逻辑与原查询完全匹配
执行后得到的结果和你原来的查询结果完全相同。
内容的提问来源于stack exchange,提问作者ningl
相关产品推荐
相关产品推荐

