我的问题陈述是:我希望得到那些只有那些已经关闭状态的订单的客户。客户不应该只有具有其他状态的单一订单。
我有一个订单表,其架构为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;
执行查询后,我得到那些甚至将订单置于其他状态的客户。
答案 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;