You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 05:22:46