对不起,这是我的第一个帖子-如果有什么不合理的地方请告诉我!
我正试图获得特定代码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。