我需要找到包含以AB开头的SKU的商品,但仍然希望查询返回包含AB和其他商品的订单。
order number 12334: sku AB12 & AB24
order number 22356: sku AB523 & KC5145
order number 123556: sku CD5641 & BG521
我希望查询返回订单号12334和22356,而不是123556
我还想知道订单是纯AB还是带有其他商品的AB 因此该表将返回仅包含AB的订单计数和包含AB与其他项目的订单计数。
我有两个表:orders
表和line_items
orders
表使order_id
链接到line_items
表ID
select * from xx.line_items l
left join xx.orders o on l.order_id=o.id
where sku like 'AB%'
答案 0 :(得分:0)
您没有为我们提供完整的解决方案的表和列的太多细节,但是看看您是否可以从这个模型中构建一些东西
select
sku,
(char_length(sku)-char_length(replace(sku,'AB','')))/2 as item_count
from your_table
where sku like '%AB%';
答案 1 :(得分:0)
以下查询为您提供了所有带有AB项目的订单ID。它显示了它们的AB计数和它们的总数,因此您可以比较两者。您还可以添加CASE WHEN
表达式来计算一个标志,以显示订单是否为纯AB。
所有这些都简单地将每个订单的项目分组,计算AB项目并关闭所有没有AB项目的订单。
select
order_id,
count(*) as count_all,
count(case when sku like 'AB%' then 1 end) as count_ab
from line_items
group by order_id
having count(case when sku like 'AB%' then 1 end) > 0;
您可以在MySQL中用count(case when sku like 'AB%' then 1 end)
替换sum(sku like 'AB%')
。
以下是建立在上面的查询,用于计算纯AB订单和混合订单:
select (count_all = count_ab) as ab_only, count(*)
from
(
select count(*) as count_all, count(case when sku like 'AB%' then 1 end) as count_ab
from line_items
group by order_id
having count(case when sku like 'AB%' then 1 end) > 0
) counted
group by (count_all = count_ab);