基于多表多条件统计用户重复标签实例
用户标签重复统计解决方案
一、统计每个用户每个标签的重复实例数
要找出单个用户重复添加的标签及其重复次数,核心是按用户ID+标签ID联合分组,这样才能精准定位到同一用户对同一标签的重复操作。SQL语句如下:
SELECT p.personID AS 用户ID, p.name AS 用户名, w.wordID AS 标签ID, w.name AS 标签名, COUNT(pw.peopleWordID) AS 重复次数 FROM peopleWords pw JOIN people p ON p.personID = pw.personID JOIN words w ON w.wordID = pw.wordID GROUP BY pw.personID, pw.wordID HAVING COUNT(pw.peopleWordID) > 1;
这里的重复次数就是该用户重复添加对应标签的总条数(比如重复加了3次,这个值就是3)。
二、统计存在重复标签的用户总数
如果只需要知道有多少用户存在标签重复的情况,可以基于上述结果进一步聚合:
SELECT COUNT(DISTINCT personID) AS 存在重复标签的用户数 FROM ( SELECT pw.personID FROM peopleWords pw GROUP BY pw.personID, pw.wordID HAVING COUNT(pw.peopleWordID) > 1 ) AS 有重复标签的用户列表;
原SQL的问题分析
你原来的SQL只按wordID分组,统计的是整个系统中每个标签被所有用户使用的总次数,完全没关联到单个用户,自然查不到同一用户重复添加同个标签的情况。核心问题就是分组维度错误,必须把用户ID和标签ID绑定在一起分组,才能定位到用户级别的重复。
内容的提问来源于stack exchange,提问作者Mr. J
相关产品推荐
相关产品推荐

