【问题标题】:Count similar records统计相似记录
【发布时间】:2015-04-16 18:06:07
【问题描述】:

如何编写一个 SQL 来显示成员 1 和 2 共有的电影数量?

MID=会员编号 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

*对不起这张可怜的桌子。

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 目的是为了让作为会员的我能在电影中看到其他有相似品味的会员吗?因为这会改变它的实施方式。
  • 是的 @Ghost 这就是目的(大致)。作为一家电影租赁企业,我想看看哪些成员对电影有相似的品味,从而向他们推荐电影。

标签: sql ms-access count


【解决方案1】:

如果您想要所有对的号码,只需进行自我加入:

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;

【讨论】:

  • 我认为“t1.mid t2.mid”
  • 不,使用&lt; 可以避免重复
  • @popovitsj 你确定吗? :)
  • @Ghost 如果你使用 你会得到Mid=1, Mid=2, Fid=1Mid=2, Mid=1, Fid=1
  • @BrettGreen 与安全无关,对更多会员也同样有效。
【解决方案2】:

使用子查询是一种方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多