我有一个来自几个人的Facebook赞的数据库。许多“user_id”中存在重复的“like_id”字段。我想要一个查询,它会找到“like_id”的人A与人B的共同点。
这个查询非常适合比较只有2个“user_id”在数据库中的喜欢,但是只要我添加第3个,它就会混乱。基本上,我想看看谁与人A有最多的“喜欢”。
SELECT *,
COUNT(*)
FROM likes
GROUP BY like_id
HAVING COUNT(*) > 1
任何人都有可能有效的查询吗?
答案 0 :(得分: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语法。
答案 1 :(得分:0)
我认为这样做会:
SELECT
likes_a.user_id,
likes_b.user_id
FROM
likes as likes_a JOIN likes as likes_b
ON
likes_a.like_id = likes_b.like_id
WHERE
likes_a.user_id <> likes_b.user_id
然后对结果进行后期处理,以计算最常见的人。