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

如何修改SQL实现本周订单统计及与上周订单数的差值计算

订单统计SQL优化方案

下面是满足需求的SQL查询语句,既保留本周订单统计,又新增上周订单数与本周的差值计算:

方式一:嵌套子查询(与原SQL风格一致)

SELECT 
  p.name AS 产品,
  -- 统计本周订单总数
  (SELECT COUNT(o.product_id)
   FROM orders o
   WHERE o.product_id = p.id 
     AND DATE(o.order_date) >= [本周起始日期] 
     AND DATE(o.order_date) <= [本周结束日期]) AS 本周订单总数,
  -- 计算上周订单数与本周的差值
  (SELECT COUNT(o.product_id)
   FROM orders o
   WHERE o.product_id = p.id 
     AND DATE(o.order_date) >= DATE_SUB([本周起始日期], INTERVAL 7 DAY) 
     AND DATE(o.order_date) <= DATE_SUB([本周结束日期], INTERVAL 7 DAY)) 
  - 
  (SELECT COUNT(o.product_id)
   FROM orders o
   WHERE o.product_id = p.id 
     AND DATE(o.order_date) >= [本周起始日期] 
     AND DATE(o.order_date) <= [本周结束日期]) AS 上周与本周订单差值
FROM products p;

方式二:LEFT JOIN + 条件聚合(效率更高)

如果订单表数据量较大,推荐用这种方式,减少重复子查询的执行次数:

SELECT 
  p.name AS 产品,
  SUM(CASE WHEN DATE(o.order_date) BETWEEN [本周起始日期] AND [本周结束日期] THEN 1 ELSE 0 END) AS 本周订单总数,
  -- 先统计上周订单数,再减去本周订单数得到差值
  SUM(CASE WHEN DATE(o.order_date) BETWEEN DATE_SUB([本周起始日期], INTERVAL 7 DAY) AND DATE_SUB([本周结束日期], INTERVAL 7 DAY) THEN 1 ELSE 0 END) 
  - SUM(CASE WHEN DATE(o.order_date) BETWEEN [本周起始日期] AND [本周结束日期] THEN 1 ELSE 0 END) AS 上周与本周订单差值
FROM products p
LEFT JOIN orders o ON p.id = o.product_id
GROUP BY p.id, p.name;

结果示例

产品本周订单总数上周与本周订单差值
剪刀63

说明:

  • 请将[本周起始日期]和[本周结束日期]替换为实际的日期值(比如'2024-05-20'和'2024-05-26')
  • 差值计算逻辑为「上周订单数 - 本周订单数」,如果差值为负数则表示本周订单数多于上周

内容的提问来源于stack exchange,提问作者boldsinas101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:30:52