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

如何用MAX函数获取SQL中销量最高的ProductID及商品名称

解决思路与SQL语句示例

嘿,我来帮你搞定这个需求!首先咱们得明确两张表的关联逻辑,假设你的销量表(比如命名为sales)包含ProductID和销量相关字段(比如单条记录的销量sales_volume,或者订单中的购买数量quantity),商品表(比如products)包含ProductID和ProductName。下面分情况给你一步步拆解:


情况1:销量表已经是每个商品的总销量统计

如果sales表每条记录对应一个商品的总销量,那咱们可以这样做:

第一步:找到销量最高的商品ID

你之前遇到聚合问题,大概率是直接把ProductID和MAX()放一起查询却没分组导致的。正确的做法是先通过子查询拿到最高销量值,再匹配对应的ProductID:

SELECT ProductID
FROM sales
WHERE sales_volume = (SELECT MAX(sales_volume) FROM sales);

注:如果有多个商品销量并列最高,这个语句会返回所有符合条件的ProductID,这比只拿单个更严谨哦。

第二步:关联商品表获取名称

把上面的查询和商品表关联,就能同时拿到ID和名称了:

SELECT p.ProductID, p.ProductName
FROM products p
JOIN sales s ON p.ProductID = s.ProductID
WHERE s.sales_volume = (SELECT MAX(sales_volume) FROM sales);

情况2:销量表是按订单明细存储(需要先汇总总销量)

如果sales表是订单明细(比如每个订单条目一条记录,存的是单次购买数量quantity),那得先按ProductID汇总总销量,再找最高值:

第一步:汇总并找到最高销量的商品ID

这里需要嵌套子查询,先汇总每个商品的总销量,再从中取最大值:

SELECT ProductID
FROM (
    SELECT ProductID, SUM(quantity) AS total_sales
    FROM sales
    GROUP BY ProductID
) AS product_sales
WHERE total_sales = (
    SELECT MAX(total_sales)
    FROM (
        SELECT SUM(quantity) AS total_sales
        FROM sales
        GROUP BY ProductID
    ) AS sales_summary
);

第二步:关联商品表获取名称

同样,把上面的子查询和商品表关联即可:

SELECT p.ProductID, p.ProductName, ps.total_sales
FROM products p
JOIN (
    SELECT ProductID, SUM(quantity) AS total_sales
    FROM sales
    GROUP BY ProductID
) AS ps ON p.ProductID = ps.ProductID
WHERE ps.total_sales = (
    SELECT MAX(total_sales)
    FROM (
        SELECT SUM(quantity) AS total_sales
        FROM sales
        GROUP BY ProductID
    ) AS sales_summary
);

为什么之前用MAX会出问题?

你提到的聚合相关问题,通常是因为直接执行类似SELECT ProductID, MAX(sales_volume) FROM sales的语句——数据库会要求非聚合字段(比如ProductID)必须出现在GROUP BY子句里,但如果加了GROUP BY ProductID,得到的是每个商品的最高销量,而不是全局最高销量对应的商品ID,这就偏离需求了。所以咱们得先拿到全局最高销量,再反向匹配对应的商品,这才是正确的思路。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:36:09