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

PostgreSQL中针对特定列值进行Distinct合并的技术问询

解决PostgreSQL分组去重需求

没问题,我来帮你搞定这个分组去重的需求!这里我们可以用窗口函数ROW_NUMBER()来轻松实现,核心思路是把所有以name.开头的记录归为同一组,其他记录各自成组,然后每组只保留第一条记录。

具体SQL语句

SELECT name, date, total
FROM (
    SELECT 
        name, 
        date, 
        total,
        ROW_NUMBER() OVER (
            PARTITION BY 
                CASE WHEN name LIKE 'name.%' THEN 'name_group' ELSE name END,
                date
            ORDER BY name
        ) AS rn
    FROM your_table_name -- 记得替换成你的实际表名
) sub
WHERE rn = 1
ORDER BY name;

代码逻辑说明

  1. 分组规则:通过CASE表达式生成分组键——如果name以name.开头,就统一用name_group作为分组标识;否则直接用name本身,这样非前缀的每条记录都会单独成为一个组。
  2. 窗口编号:ROW_NUMBER()会给每个分组内的记录按name排序后编号,这样以name.开头的组里会优先保留name.first_name这条(如果想保留其他前缀记录,调整ORDER BY的字段即可)。
  3. 筛选结果:外层查询只取编号为1的记录,也就是每个分组的第一条,刚好匹配你想要的输出结果。

把你的表数据代入执行的话,就能得到你想要的那三条目标记录啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:41