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

SQL查询报错:如何获取订单总量最高的产品线及对应总数量

问题分析与解决方案

你的SQL报错核心原因有两个:

  1. 最初的WHERE子句里,子查询没有用括号包裹,这是语法错误;
  2. 修正括号后,临时表别名x仅能在外层查询中使用,内层子查询属于独立的查询上下文,无法直接引用x,所以会提示“relation x does not exist”。

以下是几种符合你要求(不能用ORDER BY取第一条,需准确匹配最大值)的修正方案:

方案一:使用CTE(公共表表达式)

先计算所有产品线的订单总量,再匹配最大值:

WITH product_totals AS (
    SELECT 
        p.product_line,
        SUM(s.quantity_ordered) AS totalqty
    FROM sales_order s
    JOIN products p ON s.product = p.product_code
    GROUP BY p.product_line
)
SELECT product_line, totalqty
FROM product_totals
WHERE totalqty = (SELECT MAX(totalqty) FROM product_totals);

CTE会先执行并保存各产品线的总量结果,后续的主查询和子查询都能直接访问这个结果集。

方案二:嵌套子查询计算最大值

通过两层子查询先获取最大订单量,再筛选对应产品线:

SELECT 
    p.product_line,
    SUM(s.quantity_ordered) AS totalqty
FROM sales_order s
JOIN products p ON s.product = p.product_code
GROUP BY p.product_line
HAVING SUM(s.quantity_ordered) = (
    SELECT MAX(total_qty)
    FROM (
        SELECT SUM(quantity_ordered) AS total_qty
        FROM sales_order s
        JOIN products p ON s.product = p.product_code
        GROUP BY p.product_line
    ) AS sub
);

内层子查询先算出所有产品线的订单总量,中层子查询取这个总量的最大值,外层通过HAVING筛选出总量等于最大值的产品线。

方案三:窗口函数(支持并列第一的场景)

如果存在多个产品线订单总量并列最高的情况,用RANK()可以同时选出所有符合条件的记录:

SELECT product_line, totalqty
FROM (
    SELECT 
        p.product_line,
        SUM(s.quantity_ordered) AS totalqty,
        RANK() OVER (ORDER BY SUM(s.quantity_ordered) DESC) AS rnk
    FROM sales_order s
    JOIN products p ON s.product = p.product_code
    GROUP BY p.product_line
) AS ranked
WHERE rnk = 1;

窗口函数RANK()会给每个产品线按订单总量降序排名,排名为1的就是订单量最高的产品线(多个并列时都会保留)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:23:08