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

MySQL查询修正:获取发布7天内销量1-9的产品ID(升序)

修正后的MySQL查询语句及问题分析

原查询的问题

  1. 时间逻辑颠倒:原条件timestampdiff(day, o.created_at, p.created_at) <=7计算的是订单创建到产品发布的天数差,会错误包含产品发布晚于订单的情况,完全不符合“产品发布后7天内订单”的要求。
  2. 缺少分组规则:使用HAVING子句但未搭配GROUP BY,所有数据会被视为一个整体分组,只能返回单行结果。
  3. 销量统计错误:count(od.quantity)统计的是订单详情的行数,不是实际销量总和,应该用sum(od.quantity)计算总销量。
  4. 条件范围错误:要求“至少1笔销量且总销量小于10”,原条件包含0的情况,不符合需求。

正确的查询语句

SELECT p.id
FROM products p
JOIN order_details od ON p.id = od.product_id
JOIN orders o ON od.order_id = o.id
WHERE o.created_at >= p.created_at 
  AND TIMESTAMPDIFF(DAY, p.created_at, o.created_at) <= 7
GROUP BY p.id
HAVING SUM(od.quantity) BETWEEN 1 AND 9
ORDER BY p.id ASC;

语句说明

  1. 表关联顺序优化:从products表开始关联,贴合“先定位产品,再匹配对应订单”的业务逻辑。
  2. 时间条件修正:
    • o.created_at >= p.created_at:确保订单在产品发布后创建,排除时间差为负数的无效数据。
    • TIMESTAMPDIFF(DAY, p.created_at, o.created_at) <=7:计算产品发布到订单创建的天数差,确保订单落在产品发布后的7天窗口内。
  3. 分组统计:按产品ID分组,实现每个产品的独立销量统计。
  4. 销量筛选:用SUM(od.quantity)计算指定时间内的总销量,筛选出总销量1-9的产品,满足“至少1笔且小于10”的要求。
  5. 排序:最终按产品ID升序排列结果。

示例数据验证

根据提供的示例数据,所有订单的创建时间均远晚于对应产品的发布时间(超过7天),因此查询会返回空结果,符合数据逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:33:18