showliuzp 2026-04-28 20:13 采纳率: 84.5%
浏览 8
已采纳

mysql重复字段出现次数sql


user表有如下字段:
`id` bigint NOT NULL AUTO_INCREMENT,
`auth_key_id` bigint NOT NULL,
`user_id` bigint NOT NULL DEFAULT '0',


其中多个user_id可能对应同一个auth_key_id,我想统计出来user_id对应多少个重复的auth_key_id
  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-04-28 20:14
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    要统计 user_id 对应的 重复的 auth_key_id 的出现次数,可以使用 SQL 中的 GROUP BYCOUNT() 函数来实现。

    问题分析

    你希望知道每个 user_id 对应的 auth_key_id 出现了多少次,即找出哪些 user_id 下有多个相同的 auth_key_id(即“重复”的情况)。


    ✅ 解决方案

    以下是详细的解决方案步骤:

    1. 按 user_id 和 auth_key_id 分组,统计每组中出现的次数。
    2. 筛选出出现次数大于 1 的记录,表示该 user_id 对应的 auth_key_id 是重复的。
    3. 可选:将结果排序或限制返回数量,便于查看。

    🔧 SQL 查询语句

    SELECT 
        user_id, 
        auth_key_id, 
        COUNT(*) AS repeat_count
    FROM 
        user
    GROUP BY 
        user_id, 
        auth_key_id
    HAVING 
        COUNT(*) > 1;
    

    📌 重点说明:

    • GROUP BY user_id, auth_key_id:按用户和授权 ID 分组。
    • COUNT(*) AS repeat_count:统计每组的记录数。
    • HAVING COUNT(*) > 1:只保留出现次数大于 1 的记录,即重复的记录。

    📈 示例输出

    假设数据如下:

    | id | auth_key_id | user_id | |----|-------------|---------| | 1 | 1001 | 1 | | 2 | 1001 | 1 | | 3 | 1002 | 2 | | 4 | 1002 | 2 | | 5 | 1003 | 3 |

    执行上述查询后,会得到:

    | user_id | auth_key_id | repeat_count | |---------|-------------|--------------| | 1 | 1001 | 2 | | 2 | 1002 | 2 |

    这表明 user_id 为 1 和 2 的用户分别有重复的 auth_key_id。


    🧠 可选扩展

    如果你只想获取 所有重复的 user_id,而不需要具体的 auth_key_id,可以使用子查询或 DISTINCT

    SELECT DISTINCT user_id
    FROM user
    WHERE (user_id, auth_key_id) IN (
        SELECT user_id, auth_key_id
        FROM user
        GROUP BY user_id, auth_key_id
        HAVING COUNT(*) > 1
    );
    

    ✅ 总结

    • 使用 GROUP BYHAVING COUNT(*) > 1 来找出重复的组合。
    • 如果只需要 user_id,可以用 DISTINCT 或子查询进一步处理。
    • 这种方式适用于大数据量,性能良好。

    如需进一步优化或添加索引,请告知表结构和数据量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 5月3日
  • 创建了问题 4月28日