2016-11-04 3 views
0

내 문제는 다음과 같습니다. 상태가 닫힌 주문 만있는 고객을 얻고 싶습니다. 고객은 다른 상태의 단일 주문도 있어서는 안됩니다.하이브 서브 쿼리를 실행할 수 없습니다.

스키마가 Order_id, Order_customer_id, Order_date, Order_status 인 주문 테이블이 있습니다.

'완료', '처리 중', '지불 보류', '보류 중', '보류 중', '취소됨', '일시 중지됨', '보류 중'및 '닫힘'상태가 9 개 있습니다.

아래 쿼리를 실행하면 원하는 결과가 나타나지 않습니다. 내가 뭘 잘못하고 있는지 이해하는데 도와주세요.

검색어 :

select order_customer_id ,count(*) from orders where order_customer_id 
IN (select order_customer_id from orders where order_status NOT IN 
('COMPLETE' , 'PROCESSING','PAYMENT_REVIEW','PENDING' ,'ON_HOLD' ,'CANCELED','SUSPECTED_FRAUD','PENDING_PAYMENT')) 
group by order_customer_id; 

쿼리를 실행 한 후, 심지어 다른 상태에서 주문 데 그 고객을 얻고있다.

답변

1

귀하는 고객이 Closed 주문만을 가져야한다는 조건을 강요하지 않습니다. 내부 검색어의 모든 고객으로부터 모든 closed 주문을 수집합니다.

당신이 해결하는 collect_set을 사용할 수

select order_customer_id ,count from 
(select order_customer_id,collect_set(order_status),count(*) as count from orders where 
    size(collect_set(order_status)) = 1 and 
    collect_set(order_status)[0] = 'CLOSED' 
    group by order_customer_id) inner; 
관련 문제