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

如何用SQL查询拥有最多食品数量的cartId

解决查询拥有最多食品数量cartId的问题

首先你当前的SQL有两个明显问题:

  • 子查询里FROM cart_items后面多了个逗号,这会直接触发语法错误
  • 外层用MAX(unitsInCart)逻辑无效,子查询已经算出每个cartId的总和,外层这样写无法关联到对应的cartId

下面给你几种可行的解决方法:

方法1:ORDER BY + LIMIT(适合单最大项场景)

先分组计算每个cartId的总食品数,按总数降序排序后取第一条记录:

SELECT cartId, SUM(unitsInCart) AS total_units
FROM cart_items
GROUP BY cartId
ORDER BY total_units DESC
LIMIT 1;

注意:如果存在多个cartId的总食品数并列最大,这种方法只会返回其中一个。

方法2:窗口函数(支持返回所有并列最大项)

如果需要把所有总食品数并列第一的cartId都查出来,用RANK()窗口函数:

WITH cart_totals AS (
    SELECT 
        cartId, 
        SUM(unitsInCart) AS total_units,
        RANK() OVER (ORDER BY SUM(unitsInCart) DESC) AS rnk
    FROM cart_items
    GROUP BY cartId
)
SELECT cartId, total_units
FROM cart_totals
WHERE rnk = 1;

RANK()会给所有并列第一的记录标记为1,这样就能返回所有符合条件的cartId。

方法3:子查询筛选最大值(兼容老版本数据库)

先算出所有cartId的最大总食品数,再关联查询对应的cartId:

SELECT cartId, SUM(unitsInCart) AS total_units
FROM cart_items
GROUP BY cartId
HAVING SUM(unitsInCart) = (
    SELECT MAX(total)
    FROM (
        SELECT SUM(unitsInCart) AS total
        FROM cart_items
        GROUP BY cartId
    ) AS sub
);

这种方法同样能返回所有总食品数等于最大值的cartId,适合不支持窗口函数的老版本数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:22:03