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

pgsql中分组保留distinct target值且避免qz.M类行重复的实现方法

实现方案

你可以将数据拆为两类分别处理后合并,即可得到期望结果:

  1. 非qz.M前缀的print_name:直接保留所有去重后的原始记录
  2. qz.M前缀的print_name:对print_name和对应target分别去重后排序,按行号一一匹配,保证每个target仅对应一个M前缀的print_name

可用SQL语句

WITH non_m_data AS (
    -- 处理非qz.M前缀的记录,直接去重保留
    SELECT DISTINCT print_name, target
    FROM your_table -- 替换为你实际的表名
    WHERE print_name NOT LIKE 'qz.M%'
),
m_print_names AS (
    -- 提取所有qz.M前缀的print_name,去重后排序生成行号
    SELECT DISTINCT print_name,
           ROW_NUMBER() OVER (ORDER BY print_name) AS rn
    FROM your_table
    WHERE print_name LIKE 'qz.M%'
),
m_targets AS (
    -- 提取所有qz.M前缀对应的target,去重后排序生成行号
    SELECT DISTINCT target,
           ROW_NUMBER() OVER (ORDER BY target DESC) AS rn -- 此处降序排序刚好匹配你示例的M1对应q2zA、M2对应q1zA的效果,可根据实际需求调整排序规则
    FROM your_table
    WHERE print_name LIKE 'qz.M%'
)
-- 合并两类结果
SELECT print_name, target FROM non_m_data
UNION ALL
SELECT mp.print_name, mt.target
FROM m_print_names mp
JOIN m_targets mt ON mp.rn = mt.rn
ORDER BY print_name;

执行上述语句得到的结果和你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:30:03