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

MySQL查询优化:获取出现3次及以上的userID对应行或ID列表

解决MySQL查询重复userID的问题

首先来说说你原来的查询为什么会出问题:你在主查询里加了GROUP BY userID,这会让MySQL只返回每个userID的一行数据(如果没开启ONLY_FULL_GROUP_BY模式,还可能随机返回该行的其他字段值),这就导致你看到的结果里,虽然userID满足出现3次及以上的条件,但只显示了其中一行,看起来像是只出现了1次。另外,这个外层的GROUP BY完全不符合你要返回所有完整行的需求,得去掉。

下面是针对两类需求的正确查询:

一、返回所有userID出现3次及以上的完整行数据

你可以用子查询先筛选出符合条件的userID,再关联原表获取所有对应行,两种写法都可以:

写法1:使用IN子查询

SELECT *
FROM myTable
WHERE userID IN (
    SELECT userID
    FROM myTable
    GROUP BY userID
    HAVING COUNT(*) >= 3
);

写法2:使用JOIN(效率通常更高)

SELECT t.*
FROM myTable t
INNER JOIN (
    SELECT userID
    FROM myTable
    GROUP BY userID
    HAVING COUNT(*) >= 3
) AS user_counts ON t.userID = user_counts.userID;

这两种写法都会返回所有userID出现次数≥3的完整记录,不会丢失任何符合条件的行。

二、返回所有出现3次及以上的userID列表

这个需求更简单,直接用子查询的部分即可,不需要关联原表:

SELECT userID
FROM myTable
GROUP BY userID
HAVING COUNT(*) >= 3;

这样就能得到所有满足出现次数要求的userID清单啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:11:57