加入两个表以获取计数

Joining two tables to fetch count

我有两个具有以下架构的表

GROUP_ID | PURCHASE_ID |ITEMS  ---> TABLE1
  1            21         X
  1            21         Y
  1            21         Z
  2            22         X


GROUP_ID  |CUSTOMER_ID |ITEMS  --->TABLE2
1             ABC        X
1             ABC        Y
1             ABC        Z
1             ABC        A
1             ABC        B

单个 GROUP_ID 和 PURCHASE_ID 可以有多个项目,同样,单个 GROUP_ID 和 CUSTOMER_ID 可以有多个 ITEMS.The 购买的项目每个 GROUP_ID 和每个 PURCHASE_ID 只有两个或三个,但给定的 CUSTOMER_ID、GROUP_ID 可以有 n 个项目。

我想查询每个 GROUP_ID 和 PURCHASE_ID 以及 ITEMS[set],有多少客户至少购买了所有 ITEMS。

select distinct GROUP_ID,PURCHASE_ID,count(object_id)over(partition by GROUP_ID,PURCHASE_ID) from 
        (select a.GROUP_ID GROUP_ID,a.PURCHASE_ID PURCHASE_ID,b.CUSTOMER_ID object_id from      
        (select GROUP_ID,PURCHASE_ID,items,count(items)over(partition by GROUP_ID,PURCHASE_ID) val from  TABLE1)a,
        (select GROUP_ID,CUSTOMER_ID,ITEMS from TABLE2)b
        where a.GROUP_ID=b.GROUP_ID and a.items=b.ITEMS and val=3
        group by a.GROUP_ID,a.PURCHASE_ID,b.CUSTOMER_ID
        having count(*)=3)

对于上面给定的 GROUP_ID=1 和 PURCHASE_ID=21 的数据,计数应该是 1,因为存在 ID 为 ABC 的客户,他具有项目子集 [X,Y, Z] 我已经编写了代码来获取上述三个项目的客户数量。有没有什么办法可以优化或者实现这个。

非常感谢任何帮助

这是一个棘手的问题;我通常在所有必需的列上连接两个表,并寻找不同的计数来匹配,如下所示:

select t1.group_id,
    t1.purchase_id,
    count(distinct t2.customer_id) as customer_count
from Table1 as t1
inner join Table2 as t2
on t2.group_id = t1.group_id
and t2.items = t1.items
group by t1.group_id,
    t1.purchase_id
having count(distinct t2.items) >= count(distinct t1.items)

这是未经测试的,所以请尝试一下,让我知道它是否有效。