gpt4 book ai didi

mysql - 如何获取订单数子查询

转载 作者:行者123 更新时间:2023-11-29 16:18:02 25 4
gpt4 key购买 nike

我在使用以下 SQL 查询获取订单计数时遇到一些困难:

select
d.id,
d.title,
count(distinct o.id)
from store s
left join `order` o on o.store_id = s.id
left join order_product op on op.order_id=o.id
left join store_product sp on sp.id = op.product_id
left join product p on p.id = sp.product_id
left join department_category_to_entity dce1 on dce1.entity_type IN ('Product') and dce1.entity_id = p.id
left join department_category_to_entity dce2 on op.status != 'replaced' and
op.replacement_id is null and
dce2.entity_type IN ('StoreProduct') and
dce2.entity_id = sp.id
left join department_category_to_entity dce3 on op.status = 'replaced' and
op.replacement_id is not null and
dce3.entity_type IN ('StoreProduct') and
dce3.entity_id = op.replacement_id
left join department_category dc on dc.id = p.department_category_id or
dc.id = dce1.category_id or
dc.id = dce2.category_id or
dc.id = dce3.category_id
left join department d on d.id = dc.department_id


where d.id is not null

group by d.id;

是否可以在没有子查询的情况下获取订单计数或获取正确的订单计数?请帮忙...谢谢!

最佳答案

  • 您有LEFT JOIN,它表示即使“右”表中没有行也要继续查找。但是,另一方面,您正在GROUPing BYLEFT JOIN链的最后一列!也许您的意思是 JOIN 而不是 LEFT JOIN??

  • where d.id is not null 大致相当于说“哎呀,所有这些 LEFT JOIN 都可以是 JOIN.

  • 使用GROUP BYJOIN(LEFT或其他),您正在执行“膨胀-收缩”。从逻辑上讲,所有的JOINing都是为了构建一个包含所有有效组合的巨大中间表。 然后 COUNT(*)GROUP BY 就完成了。这往往会使 COUNTs(和 SUM 等)的值比预期更大。

  • departmentorder最直接的路线是什么?它似乎不涉及 store,因此删除该表。

  • 其他表格是否不相关?

即使解决了这些问题,您仍然可能会得到错误的值。首先,请为每个表提供“SHOW CREATE TABLE”。

关于mysql - 如何获取订单数子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54663038/

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