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

如何使用Array_agg避免返回不同顺序的重复值?

解决Array_Agg生成无序数组导致重复统计的问题

问题根源

你遇到的重复统计是因为array_agg默认不保证聚合元素的顺序,同一组(相同Time和ID)的Fieldname如果原始顺序不同,会生成内容相同但顺序不同的数组,被数据库视为不同的分组键,最终统计出重复记录。

正确解决方案

要让相同内容的数组被视为同一组,核心是在array_agg内部对Fieldname指定排序规则,确保生成的数组顺序一致。如果需要去重同一组内的重复Fieldname,还可以搭配DISTINCT使用:

基础版(仅统一数组顺序)

SELECT b.field, COUNT(*)
FROM (
    SELECT time, id, array_agg(fieldname ORDER BY fieldname) AS field
    FROM a
    GROUP BY time, id
) b
GROUP BY b.field
ORDER BY COUNT(*) DESC;

去重版(处理同一Time+ID下的重复Fieldname)

SELECT b.field, COUNT(*)
FROM (
    SELECT time, id, array_agg(DISTINCT fieldname ORDER BY fieldname) AS field
    FROM a
    GROUP BY time, id
) b
GROUP BY b.field
ORDER BY COUNT(*) DESC;

为什么之前的尝试无效

你之前在子查询中先排序再分组的写法逻辑错误:内层子查询的ORDER BY是在GROUP BY执行后生效,无法影响array_agg的聚合顺序。只有在array_agg函数内部直接指定排序规则,才能让聚合过程按固定顺序生成数组。

内容的提问来源于stack exchange,提问作者Mike N Excel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:20:24