mysql - 复杂的 MySQL 查询 - 查找每个 user_id 的重复项?

标签 mysql sql

我有一个包含多个人的 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/

相关文章:

sql - PostgreSQL 查询计划中缺少表访问

javascript - 有效地将 $.ajax 与 php 结合使用的问题

php - 使用 mysql_real_escape_string() 但允许带有撇号的名称

mysql - 根据 SUM 将位置值分配给行

MYSQL 多表多数据

mysql - 我想优化这个查询,它需要很多时间来执行

mysql - 在存储过程中使用变量作为字符串

php - 从数据库中的两个输入框中搜索数据在PHP

sql - MySQL源文件静静

php - 没有显示 mysql select all 的结果