2017-03-29 1 views
0

나는 다음과 같은 스키마 두 테이블을했습니다는 계산 가져 오기 위해 두 테이블을 결합

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 여러 항목과 유사 하나 GROUP_ID 및 CUSTOMER_ID 항목의 여러 ITEMS.The을 가질 수있을 수 있습니다 PURCHASE_ID 구입 한 수량은 GROUP_ID 당 PURCHASE_ID 당 2 ~ 3 개이지만 주어진 CUSTOMER_ID가있는 GROUP_ID는 여러 항목을 가질 수 있습니다.

각 GROUP_ID 및 PURCHASE_ID 및 ITEMS [집합]에 대해 쿼리하고 싶습니다. 얼마나 많은 고객이 적어도 모든 ITEMS를 구입했는지 궁금합니다. I는했습니다 항목 [X, Y, Z]의 서브 세트를 갖는 ID ABC와 고객이 존재하므로 1이어야 GROUP_ID = 1 PURCHASE_ID = 21 카운트에 대한 상기 소정의 데이터를 들면

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) 

위의 3 가지 항목에 대한 고객 수를 가져 오는 코드를 작성해야합니다. 이를 최적화하거나이를 달성 할 수있는 방법이 있습니까?

도움이 많이 있습니다.

+0

귀하의 질문은 각 테이블에 대한 예제 데이터를 제공 한 다음 기대되는 결과를 얻을 수있는 이점이 있습니다. – Anand

+0

@Anand 예상되는 입력 및 출력을 추가했습니다. –

답변

0

이것은 까다로운 문안입니다. 나는 보통 필요한 모든 컬럼에있는 두 개의 테이블을 조인과 별개의 카운트과 같이 일치를 찾습니다 :

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) 

이 지금 그것을 시도하고 작동 여부를 알려 주시기 검증되지 않은 것입니다.

관련 문제