WooCommerce按产品ID每日统计指定状态订单数的SQL查询方案求助
解决方案:按日期统计指定产品和状态的订单数量
我帮你整理了一个精准的SQL查询,能够满足你按日期统计指定产品ID、指定订单状态的每日订单创建数量的需求。先直接上可行的代码,再给你拆解逻辑:
SELECT DATE(p.post_date) AS order_date, COUNT(DISTINCT p.ID) AS order_count FROM wp_posts p INNER JOIN wp_woocommerce_order_items oi ON p.ID = oi.order_id INNER JOIN wp_woocommerce_order_itemmeta oim ON oi.order_item_id = oim.order_item_id AND oim.meta_key = '_product_id' AND oim.meta_value = '585' -- 替换成你的目标产品ID WHERE p.post_type = 'shop_order' AND p.post_status = 'wc-on-hold' -- 替换成你的目标订单状态 AND p.post_date BETWEEN '2021-01-01' AND '2021-01-21' -- 替换成你的日期范围 GROUP BY DATE(p.post_date) ORDER BY order_date ASC;
代码逻辑说明:
- 关联表的原因:你的需求需要同时过滤订单状态(来自
wp_posts)和产品ID(来自订单项元数据wp_woocommerce_order_itemmeta),所以必须通过wp_woocommerce_order_items作为中间表关联这两个核心表。 COUNT(DISTINCT p.ID):一个订单可能包含多个订单项,用DISTINCT确保每个订单只被统计一次,避免重复计数。DATE(p.post_date):提取日期部分(去掉时分秒),实现按自然日分组统计。INNER JOIN:只保留同时满足订单状态、包含指定产品的订单,过滤掉不符合条件的记录。
为什么你之前的代码没得到预期结果?
- 第一段代码:只统计了符合条件的总订单数,没有按日期分组,也没有关联产品ID的过滤逻辑,所以无法得到每日的数量。
- 第二段代码:仅查询出了符合条件的订单ID列表,但没有进行计数和按日期分组的操作,所以也无法得到你需要的两列统计数据。
额外提示:
如果需要统计日期范围内所有日期(包括没有订单的日期,显示数量为0),你需要先生成一个连续的日期序列,再和上面的统计结果做左连接。不过如果只需要有订单的日期,上面的代码就足够用了。
内容的提问来源于stack exchange,提问作者ADv
相关产品推荐
相关产品推荐

