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

单SELECT查询中双SUM子查询出错,求解决及日期排序

问题解决:按客户统计早晚订单量并按日期排序

你的问题出在子查询未关联当前客户,导致evening字段计算的是所有客户的晚间订单总量,而非单个客户的;同时原查询仅筛选了早间订单的日期,晚间订单未限定对应日期。

推荐使用条件聚合替代子查询,既能简化语句,又能准确统计单个客户的早晚订单量,同时支持按日期排序:

SELECT
  c.customername,
  SUM(CASE WHEN o.timing = 'Morning' THEN o.quantity ELSE 0 END) AS `Morning (qty)`,
  SUM(CASE WHEN o.timing = 'Evening' THEN o.quantity ELSE 0 END) AS `Evening (qty)`,
  o.orderDate
FROM
  Orders o
  INNER JOIN Order_Customer t ON o.orderId = t.orderId
  INNER JOIN Customer c ON t.customerId = c.customerid
WHERE
  o.orderDate = '2023-02-23' -- 建议使用标准日期格式,避免数据库解析异常
GROUP BY
  c.customername, o.orderDate
ORDER BY
  o.orderDate DESC; -- 按日期降序排序,如需升序改为ASC

关键调整说明:

  • 用CASE WHEN在聚合函数内区分早晚订单,一次扫描即可完成单个客户两个时段的数量统计,无需嵌套子查询。
  • 分组时包含orderDate字段,确保可以按日期排序;若需统计所有日期的客户订单,直接移除WHERE子句即可。
  • 统一使用YYYY-MM-DD标准日期格式,避免不同数据库对非标准格式的解析差异。

如果你的数据库支持PIVOT语法(如SQL Server),也可通过该方式实现,但条件聚合的兼容性更强,适用于MySQL、PostgreSQL、Oracle等绝大多数关系型数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:27:22