执行一些SQL查询后,我得到两个字段的一些记录:order_id和status_id,如下所示:
order_id status_id
---------------------------------
'102764334679', 'ITEM_PROCESSING'
'102764334679', 'ITEM_PROCESSING'
'102764334679', 'ITEM_PROCESSING'
'112202812293', 'ITEM_PROCESSING'
'112202812293', 'ITEM_COMPLETED'
'112217253712', 'READY_TO_PACK'
如何获取order_id的计数,其中status_id为' ITEM_PROCESSING'如果order_id有多个status_id,那么它将不会被计算在内。
例如,对于上述记录,最终计数将为1,因为order_id' 102764334679'状态为' ITEM_PROCESSING'在所有行中,order_id' 112202812293'有多个status_id。所以它不会被计算在内。
答案 0 :(得分:0)
这是一种方法:
select count(distinct order_id)
from t
where t.status_id = 'ITEM_PROCESSING' and
not exists (select 1
from t t2
where t2.order_id = t.order_id and t2.status_id <> 'ITEM_PROCESSING'
);
虽然以上可能效率最高,但我打算使用双重聚合来解决这个问题:
select count(*)
from (select t.order_id
from t
group by t.order_id
having min(status_id) = max(status_id) and min(status_id) = 'ITEM_PROCESSING'
) tt;