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

MySQL查询单次订单销量最高的3款产品(产品名+订单号)问题

解决单次订单中销量最高3款产品的查询问题

原SQL的问题

你写的SQL错误在于:

  • 按ProductName分组后,SUM(Quantity)计算的是某款产品在所有订单中的总销量,不是单次订单里的单款产品销量,完全不符合需求。
  • 分组时只指定了ProductName,但OrderID不在分组字段里,这在MySQL严格模式下会直接报错,返回的结果也不具备参考性。

正确的查询语句

方式1:直接取销量最高的前3条(不处理并列)

这个写法简单直接,适合只需要Top3的场景:

SELECT 
    Products.ProductName, 
    OrderDetails.OrderID, 
    OrderDetails.Quantity AS 单次订单销量
FROM 
    Products
INNER JOIN 
    OrderDetails ON Products.ProductID = OrderDetails.ProductID
ORDER BY 
    OrderDetails.Quantity DESC
LIMIT 3;

方式2:包含并列排名的Top3(推荐处理并列情况)

如果存在多个产品销量和第三名相同,用窗口函数可以把这些并列的产品都列出来:

SELECT 
    ProductName, 
    OrderID, 
    单次订单销量
FROM (
    SELECT 
        p.ProductName, 
        od.OrderID, 
        od.Quantity AS 单次订单销量,
        RANK() OVER (ORDER BY od.Quantity DESC) AS 排名
    FROM 
        Products p
    INNER JOIN 
        OrderDetails od ON p.ProductID = od.ProductID
) AS 排名结果
WHERE 排名 <= 3;

说明

  • OrderDetails表中的Quantity字段本身就是单次订单中对应产品的销量,不需要用SUM()聚合,因为每条OrderDetails记录对应一个订单里的一款产品的购买数量。
  • 两种写法都通过INNER JOIN关联Products表获取产品名称,确保结果包含你需要的字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:35:19