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

如何在SQL中对数组列的所有排列对应值分组求和?

解决SQL中数组/字符串排列分组求和问题

问题核心

需要将数组类型(或逗号分隔字符串)列的所有元素排列视为同一分组,对每组的value字段求和,且元素数量不固定(2个、3个或更多元素的排列都需归为同一组),硬编码枚举排列的方式无法覆盖所有场景。

现有方案的不足

你当前使用CASE语句硬编码匹配特定排列的方式,仅能处理预设的几组组合,一旦新增元素组合或元素数量变化,就需要修改代码,扩展性极差,无法应对动态场景。

通用解决方案

核心思路:将数组/字符串的元素排序后生成固定顺序的标识,以此作为分组键——所有排列经过排序后都会得到完全相同的标识,自然被归为同一组。

场景1:列是原生数组类型(如PostgreSQL、BigQuery等支持数组的数据库)

以PostgreSQL为例:

SELECT
    array_to_string(array_sort(table_list), ',') AS tables_group,
    SUM(value) AS total_value
FROM my_table
GROUP BY tables_group;

场景2:列是逗号分隔的字符串(如示例中的a,b,c格式)

以PostgreSQL为例:

SELECT
    array_to_string(array_sort(string_to_array(table_column, ',')), ',') AS tables_group,
    SUM(value) AS total_value
FROM my_table
GROUP BY tables_group;

场景3:BigQuery语法适配

SELECT
    ARRAY_TO_STRING(ARRAY(SELECT val FROM UNNEST(SPLIT(table_column, ',')) val ORDER BY val), ',') AS tables_group,
    SUM(value) AS total_value
FROM my_table
GROUP BY tables_group;

效果验证

针对你的示例数据,所有a,b,c的排列排序后都会生成a,b,c作为分组键,求和结果为10+21+12+13+16+12=84;所有d,e,f的排列排序后生成d,e,f,求和结果为15+12+13+16+11+20=87,完全符合期望输出。

这种方案无需硬编码任何组合,无论元素数量多少,都能自动完成分组求和,具备极强的扩展性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:40:27