J'ai deux tables avec le schéma suivantJoindre deux tables pour aller chercher compter
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
Un seul GROUP_ID et PURCHASE_ID peut avoir plusieurs éléments et de même un seul GROUP_ID et CUSTOMER_ID peuvent avoir plusieurs items.The nombre d'éléments acheté sera seulement deux ou trois par GROUP_ID et par PURCHASE_ID mais un CUSTOMER_ID donné, GROUP_ID peut avoir un certain nombre d'éléments.
Je souhaite interroger pour chaque GROUP_ID et PURCHASE_ID et ITEMS [set], combien de clients ont acheté au moins tous les 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)
Pour les données fournies ci-dessus pour GROUP_ID = 1 et PURCHASE_ID = 21 le nombre devrait être 1 car il existe un client avec ID ABC qui a le sous-ensemble d'éléments [X, Y, Z] I AVONS code écrit pour aller chercher le nombre de clients pour trois articles comme ci-dessus. Y a-t-il un moyen d'optimiser cela ou d'y parvenir?
Toute aide est très appréciée
Votre question peut bénéficier grandement de fournir des exemples de données pour chaque table, puis la sortie attendue. – Anand
@Anand J'ai ajouté les entrées et sorties attendues –