2016-11-04 72 views
0

我的问题陈述是:我想获得那些只有那些状态已关闭的订单的客户。客户不应该拥有其他状态的单一订单。无法运行Hive子查询

我有一个订单表与模式为Order_id,Order_customer_id, Order_date,Order_status

有9个订单状态是'完成','处理','PAYMENT_REVIEW','PENDING','ON_HOLD','取消','SUSPECTED_FRAUD','PENDING_PAYMENT'和'CLOSED'。

当我在查询下运行时,我没有得到想要的结果。 请帮我理解我做错了什么。

查询:

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;