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

如何从数据表中获取Top 1组重复数据?

获取重复次数最多的Top1组数据

要实现从xyz表中提取重复次数最多的一组数据(以Name、Mobile、Email的组合作为重复判定依据),且无重复数据时输出空,可以通过以下SQL方案实现:

方案1:输出所有重复次数最多的组(支持并列)

如果存在多个组重复次数相同且均为最大值,该方案会输出所有这些组的全部记录:

SELECT x.*
FROM xyz x
-- 统计每个组合的重复次数
JOIN (
    SELECT Name, Mobile, Email, COUNT(*) AS cnt
    FROM xyz
    GROUP BY Name, Mobile, Email
) AS grouped 
    ON x.Name = grouped.Name 
    AND x.Mobile = grouped.Mobile 
    AND x.Email = grouped.Email
-- 找到最大的重复次数
JOIN (
    SELECT MAX(cnt) AS max_cnt
    FROM (
        SELECT COUNT(*) AS cnt
        FROM xyz
        GROUP BY Name, Mobile, Email
    ) AS counts
) AS max_counts 
    ON grouped.cnt = max_counts.max_cnt
-- 过滤无重复的情况
WHERE max_counts.max_cnt > 1;

方案2:仅输出重复次数最多的单个组(按指定规则取Top1)

如果需要在多个并列的最大重复组中仅取一组(比如按Name、Mobile字母顺序排序后的第一个),可以使用窗口函数实现:

SELECT x.*
FROM xyz x
JOIN (
    -- 对每个组按重复次数降序、Name和Mobile升序排序,取排名第一的组
    SELECT Name, Mobile, Email
    FROM (
        SELECT Name, Mobile, Email, COUNT(*) AS cnt,
               ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC, Name, Mobile) AS rn
        FROM xyz
        GROUP BY Name, Mobile, Email
    ) AS ranked
    -- 只保留重复次数>1且排名第一的组
    WHERE rn = 1 AND cnt > 1
) AS top_group 
    ON x.Name = top_group.Name 
    AND x.Mobile = top_group.Mobile 
    AND x.Email = top_group.Email;

示例验证

对于你提供的第一组测试数据,方案2会输出Name=k1、Mobile=900000000、Email=k1@gmail.com的两条记录,与期望输出一致;当表中无重复数据时,两个方案都会返回空结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:22:39