mysql - 复杂查询: find all users who rated at least 2 common movies rated by u1

标签 mysql sql

因此我们有以下电影评级关系数据库:

  mysql> select * from ratings;
+-----+-----+------+
| uid | mid | rid  |
+-----+-----+------+
| u1  | m1  |    4 |
| u1  | m2  |    3 |
| u2  | m2  |    5 |
| u2  | m3  |    4 |
| u3  | m1  |    4 |
| u3  | m2  |    5 |
| u3  | m3  |    2 |
+-----+-----+------+
7 rows in set (0.03 sec)

因此,我们希望找到对至少 2 部常见电影(由特定用户“u1”评分的电影)进行过评分的所有用户。换句话说,如果用户“u1”对电影 m1、m2、m3 进行了评分,我们需要所有其他也对电影 m1、m2、m3 中至少 2 部进行评分的用户 ID。

所以在这种情况下,答案应该是 u3,因为 u3 已对 m1、m2、m3 进行了评分,其中包括 2 部带有“u1”的常见电影。我尝试了以下语句:

mysql> SELECT * 
       FROM ratings 
       WHERE mid IN (SELECT mid FROM ratings WHERE uid='u1');


+-----+-----+------+
| uid | mid | rid  |
+-----+-----+------+
| u1  | m1  |    4 |
| u1  | m2  |    3 |
| u2  | m2  |    5 |
| u3  | m1  |    4 |
| u3  | m2  |    5 |
+-----+-----+------+
5 rows in set (0.00 sec)

所以,这给了我与用户 u1 一样的常见电影的所有评分。现在,我如何才能只获取那些与 u1 至少有 2 个共同条目的条目?

最佳答案

SELECT R.uid from ratings R
JOIN
(SELECT distinct mid  
 FROM ratings 
 WHERE uid='u1') T
ON R.mid = T.mid
group by R.uid
having count(R.mid) = 2;

+-----+
| uid |
+-----+
| u1  |
| u3  |
+-----+
2 rows in set (0.15 sec)

关于mysql - 复杂查询: find all users who rated at least 2 common movies rated by u1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111602/

相关文章:

.net - 中等信任度下进程内数据库的选项

sql - 当前日期减去星期几

sql - 如何处理返回超过1个值的子查询

mysql - SQL 连接条件

mysql - 基于左连接返回不同的记录

mysql - jquery表无法很好地解释mysql表中的中文或任何重音字符

php - 连接两个表时联接查询无法正常工作

mysql - 比较 mysql 表以查看每个条目是否有可用记录

php - 将 'CASE WHEN' 添加到 codeigniter CI_DB_mysql_driver 对象的 ar_select 键

php - SQL 查询从表中获取记录