我有一个包含多个人的 Facebook 点赞的数据库。许多“user_id”之间存在重复的“like_id”字段。我想要一个查询来查找 A 与 B 的“like_id”共有数量。
当数据库中只有 2 个“user_id”时,此查询非常适合比较喜欢,但一旦我添加第三个,它就会变得困惑。基本上,我想看看谁与 A 的共同点最多。
SELECT *,
COUNT(*)
FROM likes
GROUP BY like_id
HAVING COUNT(*) > 1
有人有可能有效的查询吗?
最佳答案
这个 SQL 应该可以工作。您只需输入用户 A 的 user_id,它就会与所有其他用户进行比较并显示最匹配的用户。您可以将其更改为显示前 5 名或执行您需要执行的任何其他操作。
基本上它所做的是在表上进行自连接,但要确保在进行连接时,它是不同的 user_id,但“like”是相同的。然后,它按其他每个 user_id 进行分组,并对该 user_id 的相同数量的喜欢进行求和。
SELECT all_other_likes.user_id, count(all_other_likes.like_id) AS num_similar_likes
FROM likes original_user_likes
JOIN likes all_other_likes
ON all_other_likes.user_id != original_user_likes.user_id
AND original_user_likes.like_id = all_other_likes.like_id
WHERE original_user_likes = USER_ID_YOU_WANT_TO_COMPARE
GROUP BY all_other_likes.user_id
ORDER BY count(all_other_likes.like_id) DESC
LIMIT 1;
不确定您使用的是什么数据库。如果是 MS-SQL,您可能需要执行 SELECT TOP 1,但这是有效的 PostgreSQL 和 MySQL 语法。
关于mysql - 复杂的 MySQL 查询 - 查找每个 user_id 的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864517/