2015-04-16 51 views
0

如何编写一个显示成员1和成员2具有共同影片数量的SQL?计数相似的记录

MID =会员ID FID =电影ID 下表说明:会员1在他的名单上有电影2,3,5,17,21。成员2的名单上有5,14,18部电影。

1. MID ------ | FID 
2. M000001 | F000002 
3. M000001 | F000003 
4. M000001 | F000005 
5. M000001 | F000021 
6. M000002 | F000005 
7. M000002 | F000014 
8. M000002 | F000018 
9. M000003 | F000001 
10. M000003 | F000004 
11. M000003 |F000024 

*对不起,可怜的表。

+0

你正在使用哪个DBMS? Postgres的?甲骨文? –

+0

作为会员,我可能会看到其他会员在电影中有类似的品味吗?因为这改变了应该如何实施。 – UnhandledExcepSean

+0

是@Ghost这是(粗略地)目的。作为电影租赁公司,我想看看哪些成员在电影中有类似的品味,因此向他们推荐电影。 –

回答

0

使用子查询是一种方法。

SELECT COUNT(*) FROM t1 t 
WHERE EXISTS (SELECT 1 FROM t1 WHERE Mid = 2 AND Fid = t.Fid) 
AND Mid = 1 
3

如果你想将所有对的数量,只是做一个自联接:

select t1.mid, t2.mid, count(*) 
from table as t1 inner join 
    table as t2 
    on t1.fid = t2.fid and t1.mid < t2.mid 
group by t1.mid, t2.mid; 

如果你想这个限制只是两个成员,你可以这样做:

select count(*) 
from table as t1 inner join 
    table as t2 
    on t1.fid = t2.fid and 
     t1.mid = 1 and 
     t2.mid = 2; 
+0

我认为“t1.mid t2.mid” – UnhandledExcepSean

+1

不,使用'<'避免重复 – wvdz

+0

@popovitsj你确定吗? :) – UnhandledExcepSean