gpt4 book ai didi

mysql - 尝试查找仅包含具有特定样式和名称的订单项的订单

转载 作者:行者123 更新时间:2023-11-29 15:42:32 24 4
gpt4 key购买 nike

我需要做的是找到仅包含具有特定样式和名称的订单项的每个订单,其中包含“Commander”。

我有两个表,订单和行项目。订单不引用订单项,但每个订单项都附加有一个 order_id。

Orders
|id | is_presale | type | status |
| 1 | 1 | sale | ready |
| 2 | 1 | sale | ready |
| 3 | 0 | sale | ready |
| 4 | 1 | sale | ready |
Lineitems
|order_id | style | name |
| 1 | NM | Commander: 1 |
| 1 | NM | Commander: 2 |
| 2 | EX | Commander: 2 |
| 2 | NM | Commander: 2 |
| 2 | EX | Something Else: 3 |

这是我当前的查询:

SELECT COUNT(DISTINCT o.id) from orders o, lineitems l
WHERE o.type = 'sale'
AND o.is_presale = 1
AND o.status <> 'canceled'
AND l.order_id = o.id
AND l.style = 'NM'
AND l.name LIKE '%Commander%'

现在,我构建的查询将返回包含具有特定样式和名称的订单项的所有订单,但不会排除包含其他样式和名称的订单项的订单。

因此,如果上面是对两个表中的行的引用,那么当我想要的只是订单 1 时,它会同时计算订单 1 和订单 2。

最佳答案

您不需要加入表,因为您可以从表 lineitems 中计算订单 ID:

select
count(distinct order_id) counter
from lineitems
group by order_id
having
count(distinct style) = 1 and sum(style = 'NM') > 0
and
sum(name not like '%Commander%') = 0

请参阅demo .
结果:

| counter |
| ------- |
| 1 |

如果您想对表 orders 应用其他条件,请加入:

select count(*) counter
from orders o inner join (
select
order_id
from lineitems
group by order_id
having
count(distinct style) = 1 and sum(style = 'NM') > 0
and
sum(name not like '%Commander%') = 0
) t on t.order_id = o.id
where o.type = 'sale'
and o.is_presale = 1
and o.status <> 'canceled'

请参阅demo .

关于mysql - 尝试查找仅包含具有特定样式和名称的订单项的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com