如何用MySQL查询存在多个sid值的异常用户ID
找出对应多个sid的异常userid解决方案
针对你的需求,这里提供几种高效的MySQL查询语句,适用于500万条数据的场景:
方案一:GROUP BY + HAVING(最简洁高效)
这是处理这类分组统计问题的经典写法,直接筛选出拥有多个不同sid的userid:
SELECT userid FROM your_table_name GROUP BY userid HAVING COUNT(DISTINCT sid) > 1;
逻辑说明
GROUP BY userid将相同userid的记录归为一组COUNT(DISTINCT sid)统计每组内不同sid的数量,排除同一sid重复出现的情况HAVING COUNT(...) > 1筛选出sid数量大于1的userid,也就是异常记录
性能优化建议
因为表数据量较大(500万条),建议创建userid和sid的联合索引,大幅提升分组统计的效率:
CREATE INDEX idx_userid_sid ON your_table_name(userid, sid);
方案二:窗口函数(MySQL 8.0+适用)
如果需要同时查看异常userid对应的所有sid,或者使用MySQL 8.0及以上版本,可使用窗口函数实现:
SELECT DISTINCT userid FROM ( SELECT userid, sid, COUNT(DISTINCT sid) OVER (PARTITION BY userid) AS sid_count FROM your_table_name ) t WHERE sid_count > 1;
逻辑说明
- 子查询中用
PARTITION BY userid按userid分区,计算每个分区内的不同sid数量 - 外层查询筛选出sid数量大于1的userid,用
DISTINCT去重
注意:将语句中的your_table_name替换为你的实际表名。
内容的提问来源于stack exchange,提问作者tys
相关产品推荐
相关产品推荐

