MySQL如何在一列中进行排列并运行计算?

MySQL如何在一列中进行排列并运行计算?,mysql,algorithm,Mysql,Algorithm,假设我有一个下表: 现在我想在cid列中为每两个ID(假设id1=a和id2=B)进行排列,并尝试计算a和B的pid的交点除以a和B的pid的并集。例如,假设a=cid 1和B=cid 2,那么答案是交集/并集=0/(1+1)=0(注意B购买了三次pid 3,但同一产品只购买了一次) 结果应该是: 表1.cid中有任意两个不同数字的排列,其中较小的数字在较大的数字之前,以及交集/并集的结果。我如何编写一个查询来执行此操作?通过在PID列上将表自身连接起来,可以实现并集和交集: SELECT

假设我有一个下表:

现在我想在cid列中为每两个ID(假设id1=a和id2=B)进行排列,并尝试计算a和B的pid的交点除以a和B的pid的并集。例如,假设a=cid 1和B=cid 2,那么答案是交集/并集=0/(1+1)=0(注意B购买了三次pid 3,但同一产品只购买了一次)

结果应该是:


表1.cid中有任意两个不同数字的排列,其中较小的数字在较大的数字之前,以及交集/并集的结果。我如何编写一个查询来执行此操作?

通过在PID列上将表自身连接起来,可以实现并集和交集:

SELECT a.cid a, b.cid b, COUNT(*) intersection
FROM table a
INNER JOIN table b
ON a.pid = b.pid AND a.cid < b.cid
当然,您可以对此进行一点优化,因为内部联接是外部联接的子集,所以实际上不需要同时执行这两种联接,但这是另一个问题的问题

SELECT a, b, intersection/union
FROM (<intersection query>) i
JOIN (<union query>) u
ON i.a = u.a AND i.b = u.b