加入两个表以获取计数
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)
这是未经测试的,所以请尝试一下,让我知道它是否有效。
我有两个具有以下架构的表
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)
这是未经测试的,所以请尝试一下,让我知道它是否有效。