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

PostgreSQL:基于tag列筛选name唯一值的实现方案

解决方案

问题出在你的过滤逻辑会同时匹配tag='cep'和分区内第一条数据,当cep不是分区第一条时,就会产生重复记录。正确的做法是在排序阶段为cep设置最高优先级,确保每个name仅返回一条符合规则的数据:

SELECT name, tag
FROM (
    SELECT 
        name, 
        tag,
        row_number() OVER (
            PARTITION BY name 
            ORDER BY CASE WHEN tag = 'cep' THEN 0 ELSE 1 END, tag -- 非cep场景可替换为随机函数
        ) AS rn
    FROM your_table -- 替换为实际表名
) AS sub_query
WHERE rn = 1;

逻辑说明

  • 用CASE WHEN tag = 'cep' THEN 0 ELSE 1 END作为排序首条件,让cep标签的记录排在每个name分组的最前列
  • 第二个排序条件可按需调整:
    • 若需随机选取非cep的标签,可替换为对应数据库的随机函数(如MySQL用RAND(),PostgreSQL用random())
    • 若需固定选取某一规则的标签(如字典序),保留tag即可
  • 最后通过WHERE rn = 1过滤,每个name仅返回一条数据,优先选取cep标签,无cep时按排序规则选取任意一个标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:07:02