如何仅在同一订单可能有多个代码时获得具有特定代码的订单计数?

  • 本文关键字:代码 单计数 何仅 可能有 sql oracle
  • 更新时间 :
  • 英文 :


对不起,这是我的第一个帖子-如果有什么不合理的地方请告诉我!

我正试图获得特定代码XXX ONLY的订单数量的计数

假设表A是这样的

|ORDER ID | ITEM CODE |
123         XXX    
123         YYY
123         YYY
456         XXX
456         XXX
456         XXX
789         XXX
000         YYY

我想要的输出是:

  • 订单123和000不计算
  • 和订单456和789分别计为1

我只想要商品代码为XXX的唯一订单的计数

所以最后查询的计数/输出应该是2

现在我有

select order_id, item code, count(order_id) from table a
where item code = 'XXX' 
group by order_id, item code
order by count(order_id)

输出如下

ORDER_ID  | ITEM CODE  |  COUNT(ORDER_ID)
123        XXX            1
345        XXX            3
789        XXX            1

这是错误的,因为我想要如上所述的输出

提前感谢!

select order_id
from table_a
group by order_id
having min(item_code) = 'XXX'
and max(item_code) = 'XXX'

似乎你想要这个:

select distinct order_id , item_code , 1 as count
from table t1
where not exists (
select 1 from table t2 
where t1.order_id = t2.order_id 
and t2.item_code <> 'XXX'
)

每个问题的计数都是1

一个选择是使用反连接。例如:

select distinct t.order_id, 1 as cnt
from table_a t
left join table_a u on u.order_id = t.order_id and u.item_code <> 'XXX'
where t.item_code = 'XXX' and u.order_id is null

结果:

ORDER_ID  CNT 
--------- --- 
789       1  
456       1 

参见运行示例:db<>fiddle。

编辑

若要仅获取总数,请按如下所示调整查询:

select count(distinct t.order_id) as cnt
from table_a t
left join table_a u on u.order_id = t.order_id and u.item_code <> 'XXX'
where t.item_code = 'XXX' and u.order_id is null

结果:

CNT
---
2

参见运行示例:db<>fiddle。

最新更新