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

PostgreSQL中如何追踪GROUP BY分组涉及的源行并定位重复记录

SQL查询重复分组明细操作方案

针对你需要获取Date、Condition重复分组下全部明细行的需求,提供两种可直接使用的实现方案:

  • 方案1:分组筛选后关联原表(新手友好,逻辑直观)
    先通过分组聚合筛选出存在重复的分组,再关联原表获取该分组下的所有记录,SQL语句如下:
    SELECT t1.*
    FROM test_table t1
    INNER JOIN (
        -- 子查询:找出所有记录数大于1的重复分组
        SELECT Date, Condition
        FROM test_table
        GROUP BY Date, Condition
        HAVING COUNT(*) > 1
    ) t2 ON t1.Date = t2.Date AND t1.Condition = t2.Condition
    ORDER BY t1.Date, t1.Condition
    
  • 方案2:窗口函数实现(代码更简洁,支持同时输出聚合指标)
    利用窗口函数直接给每行计算所属分组的记录数,再筛选出属于重复分组的行即可:
    SELECT * FROM (
        SELECT 
            *,
            -- 统计每行所属Date+Condition分组的总记录数
            COUNT(*) OVER(PARTITION BY Date, Condition) AS group_total
        FROM test_table
    ) temp
    WHERE group_total > 1
    ORDER BY Date, Condition
    

如果你需要同时查看每个重复分组的聚合结果(比如最大值、平均值),可以直接在窗口函数中新增对应的计算逻辑,无需额外关联:

SELECT * FROM (
    SELECT 
        *,
        COUNT(*) OVER(PARTITION BY Date, Condition) AS group_total,
        MAX(Value) OVER(PARTITION BY Date, Condition) AS group_max_value,
        AVG(Value) OVER(PARTITION BY Date, Condition) AS group_avg_value
    FROM test_table
) temp
WHERE group_total > 1

性能提示

针对100万行量级的表,只要你在Date和Condition字段上建立了联合索引,以上两种方案的执行效率都可以得到保障,无需担心查询超时问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:48:03