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

MySQL实现Northwind数据库各供应商销量最高产品查询的技术问询

解决每个供应商销量最高产品的MySQL查询问题

嘿,我来帮你搞定这个查询Northwind数据库里每个供应商销量最高产品的问题!先纠正你之前SQL里的一个小误区:用count(*)统计的是订单明细的行数,而实际销量应该是购买数量的总和,也就是SUM(Quantity),这个细节很重要哦。

下面给你两种解决方案,分别适配不同版本的MySQL:

方案一:用窗口函数(MySQL 8.0+ 推荐)

窗口函数是最简洁直观的方式,还能轻松处理并列第一的情况:

WITH ProductSales AS (
    SELECT 
        p.SupplierID,
        p.ProductID,
        p.ProductName,
        SUM(od.Quantity) AS TotalSales
    FROM `order details` od
    JOIN products p ON od.ProductID = p.ProductID
    GROUP BY p.SupplierID, p.ProductID, p.ProductName
),
RankedProducts AS (
    SELECT 
        SupplierID,
        ProductID,
        ProductName,
        TotalSales,
        -- RANK()会保留并列第一,ROW_NUMBER()只会取一个,按需选择
        RANK() OVER (PARTITION BY SupplierID ORDER BY TotalSales DESC) AS SalesRank
    FROM ProductSales
)
SELECT 
    SupplierID,
    ProductID,
    ProductName,
    TotalSales
FROM RankedProducts
WHERE SalesRank = 1;

代码解释:

  • ProductSales 这个CTE先计算每个产品的总销量,同时关联products表拿到对应的供应商ID和产品名称。
  • RankedProducts 用RANK()窗口函数按供应商分组,组内按销量降序排名,这样每个供应商下销量最高的产品排名就是1。
  • 最后筛选出排名为1的记录,就是我们要的结果。

方案二:用子查询(适配MySQL 5.x 及更早版本)

如果你的MySQL版本不支持窗口函数,用嵌套子查询也能实现:

SELECT 
    p.SupplierID,
    p.ProductID,
    p.ProductName,
    SUM(od.Quantity) AS TotalSales
FROM `order details` od
JOIN products p ON od.ProductID = p.ProductID
GROUP BY p.SupplierID, p.ProductID, p.ProductName
HAVING SUM(od.Quantity) = (
    SELECT MAX(Sales)
    FROM (
        SELECT SUM(od2.Quantity) AS Sales
        FROM `order details` od2
        JOIN products p2 ON od2.ProductID = p2.ProductID
        WHERE p2.SupplierID = p.SupplierID
        GROUP BY p2.ProductID
    ) AS SupplierProductSales
);

代码解释:

  • 外层查询先算出每个产品的总销量。
  • 内层嵌套子查询先计算当前供应商下所有产品的销量,再取最大值,最后用HAVING筛选出销量等于这个最大值的产品。

额外提醒

  • 因为order details表名包含空格,所以必须用反引号`包裹,MySQL才能正确识别。
  • 如果需要包含从未卖出过的产品(销量为0),可以把JOIN改成LEFT JOIN,并把SUM(od.Quantity)改成COALESCE(SUM(od.Quantity), 0),不过这类产品通常不会是销量最高的,按需调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:50:46