gpt4 book ai didi

mysql - 连接两个表以获取计数

转载 作者:行者123 更新时间:2023-11-29 10:55:31 24 4
gpt4 key购买 nike

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

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 可以有多个项目。每个 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)

这尚未经过测试,因此请尝试一下,然后告诉我它是否有效。

关于mysql - 连接两个表以获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43100366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com