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

SQL查询错误排查:2023年销量最高日期统计结果异常问题

问题排查与修正

核心错误点

  1. 销量统计逻辑完全错误
    你用AVG(o.id)计算销量完全不合理——id是订单表的自增主键,它的平均值和销量没有任何关联。如果统计订单数量,应该用COUNT(o.id);如果统计商品总销量,需要关联order_items表统计SUM(qty)。

  2. WHERE子句条件无效且范围错误

    • DAYOFWEEK(o.created_at)没有设定判断条件,它返回1-7的数值(1=周日,2=周一…7=周六),非零值在SQL中会被判定为真,等于没加这个过滤规则。
    • 你只过滤了year(o.created_at) = '2023',但需求是2023年1月1日到当前日期,正确写法应为o.created_at >= '2023-01-01' AND o.created_at <= CURRENT_TIMESTAMP。
  3. 排序逻辑错误
    ORDER BY DAY(o.created_at)里的DAY()函数返回的是日期的“日”(比如1号、2号),不是星期几的顺序。要按星期排序,应该用DAYOFWEEK(o.created_at)或者WEEKDAY()(注意两者索引规则:DAYOFWEEK是1=周日,WEEKDAY是0=周一)。

  4. 表名关键字冲突
    order是SQL关键字,直接使用会报错,需要用反引号包裹成`order`。

修正后的SQL(两种常见场景)

场景1:统计每日订单数量

SELECT 
    DAYNAME(o.created_at) AS day,
    COUNT(o.id) AS order_count
FROM 
    `order` o
WHERE 
    o.created_at >= '2023-01-01' 
    AND o.created_at <= CURRENT_TIMESTAMP
GROUP BY 
    DAYNAME(o.created_at), DAYOFWEEK(o.created_at)
ORDER BY 
    DAYOFWEEK(o.created_at)

场景2:统计每日商品总销量(更符合“销量”常规定义)

SELECT 
    DAYNAME(o.created_at) AS day,
    SUM(oi.qty) AS total_sales
FROM 
    `order` o
JOIN 
    order_items oi ON o.id = oi.order_id
WHERE 
    o.created_at >= '2023-01-01' 
    AND o.created_at <= CURRENT_TIMESTAMP
GROUP BY 
    DAYNAME(o.created_at), DAYOFWEEK(o.created_at)
ORDER BY 
    DAYOFWEEK(o.created_at)

翻译后的表结构

  • 订单表(order):id(整数 主键 自增)、订单编号(字符串 非空)、订单类型(整数)、创建时间(时间戳)
  • 订单项表(order_items):id(整数 主键 自增)、商品ID(整数)、订单ID(整数)、数量(整数)、单价(十进制)、创建时间(时间戳)
  • 商品表(product):id(整数 主键 自增)、商品组ID(整数)、供应商ID(整数)、商品名称(字符串)、创建时间(时间戳)等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:15:07