无法运行Hive子查询

时间:2016-11-04 14:38:32

标签: mysql hadoop hive hiveql

我的问题陈述是:我希望得到那些只有那些已经关闭状态的订单的客户。客户不应该只有具有其他状态的单一订单。

我有一个订单表,其架构为Order_idOrder_customer_idOrder_dateOrder_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 个答案:

答案 0 :(得分: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;