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

如何筛选包含Type='Personal'的重复Name数据库记录?

筛选满足条件的重复记录

你的原SQL仅筛选出了Name存在重复的记录,但没有排除那些重复Name分组里完全没有Personal类型的情况(比如Hassan的两条记录)。要得到预期结果,需要同时满足两个条件:

  • 同一Name存在多条记录
  • 该Name的记录中至少有一条Type为Personal

方法一:使用窗口函数

SELECT ID, Name, Type
FROM (
    SELECT 
        ID, 
        Name, 
        Type,
        -- 统计每个Name的记录数
        COUNT(*) OVER (PARTITION BY Name) AS cnt,
        -- 判断该Name分组是否存在Personal类型(存在则返回1,否则0)
        MAX(CASE WHEN Type = 'Personal' THEN 1 ELSE 0 END) OVER (PARTITION BY Name) AS has_personal
    FROM THIS_TABLE
) AS t
-- 筛选重复且存在Personal的分组记录
WHERE t.cnt > 1 AND t.has_personal = 1

方法二:使用子查询关联

SELECT t.ID, t.Name, t.Type
FROM THIS_TABLE t
-- 先筛选出符合条件的Name:重复且至少有一条Personal
JOIN (
    SELECT Name
    FROM THIS_TABLE
    GROUP BY Name
    HAVING COUNT(*) > 1 
       AND SUM(CASE WHEN Type = 'Personal' THEN 1 ELSE 0 END) > 0
) AS filtered_names ON t.Name = filtered_names.Name

这两种写法都能得到你想要的结果:只返回Jack的两条记录,排除Hassan的重复记录(因为该分组没有Personal类型),同时也不会返回Ahmed(仅单条记录)和Charlie(单条记录)的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:30:24