繁体   English   中英

MySQL - 对条件相同的多行进行分组

[英]MySQL - Grouping multiple rows where criteria is the same

我有一个电影评级表,其中包含数百万行包含userid,movieid和评级的行。

| userId | movieId | rating |
------------------------------
| 1      | 213     | 5      |
| 1      | 245     | 4      |
| 2      | 213     | 4      |
| 2      | 245     | 4      |
| 3      | 657     | 5      |
| 3      | 245     | 5      |

我试图想出一种将userId分组在一起的方法,其中包含匹配的movieId集合。 理想情况下,我希望查询只查找匹配项,如果它们共有至少5个movieId,并且如果评级高于4,但我已经为此示例简化了它。

在上面的实例中,userId 1和2将是唯一匹配的用户,因为它们都包含相同的movieIds。 我需要一个基本上可以复制它的声明。 在此先感谢您的帮助。

您可以在匹配的电影上执行自我加入,过滤掉具有不感兴趣的评级的记录,按用户对进行分组,然后仅为那些至少具有必要匹配记录数的组过滤结果组:

SELECT   a.userId, b.userId
FROM     myTable a JOIN myTable b USING (movieId)
WHERE    a.userId < b.userId
     AND a.rating > 4
     AND b.rating > 4
GROUP BY a.userId, b.userId
HAVING   COUNT(*) >= 5
select movieId, rating 
from tablename
group by movieId 
having count(userId) > 1 and rating > 4;

这给了我movieId 245和等级5,根据你提供的示例数据,它应该是正确的,有超过1个userId和大于4的等级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM