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

如何查询订单商品总价最高的订单?(MySQL与Oracle实现)

查询总价最高的订单:MySQL与Oracle实现方案

问题核心

从Orders(订单表,字段id、orderName)和Order_item(订单项表,字段id、partname、price、order_id,order_id关联Orders.id)中,找出订单总价最高的所有订单(若存在多个订单总价相同且为最高值,需全部返回)。


MySQL 实现方式

1. 仅返回单个最高总价订单(你的可行语句)

你提供的第二个语句可正常运行,但仅能返回一个订单(即使存在多个总价并列最高的情况):

SELECT ord.* 
FROM ORDERS ord 
WHERE ID =  (  
    SELECT o.id 
    FROM ORDERS o
    INNER JOIN order_item oi ON o.id = oi.order_id 
    GROUP BY o.id 
    ORDER BY SUM(oi.price) DESC 
    LIMIT 1
);

2. 返回所有并列最高总价的订单

如果需要覆盖多个订单总价相同且为最高的场景,使用以下语句:

SELECT ord.*
FROM ORDERS ord
JOIN (
    -- 先计算每个订单的总价
    SELECT o.id, SUM(oi.price) AS total_price
    FROM ORDERS o
    INNER JOIN order_item oi ON o.id = oi.order_id
    GROUP BY o.id
) order_totals ON ord.id = order_totals.id
-- 筛选出总价等于最高总价的订单
WHERE order_totals.total_price = (
    SELECT MAX(total_price)
    FROM (
        SELECT SUM(oi.price) AS total_price
        FROM order_item oi
        GROUP BY oi.order_id
    ) temp
);

Oracle 实现方式

Oracle不支持MySQL的LIMIT语法,需用窗口函数或ROWNUM实现,以下是两种常用方案:

1. 推荐:用RANK()窗口函数(支持返回所有并列最高订单)

RANK()函数会为所有总价最高的订单标记排名为1,自动处理并列场景:

SELECT ord.id, ord.orderName
FROM ORDERS ord
JOIN (
    SELECT 
        o.id, 
        SUM(oi.price) AS total_price,
        -- 按总价降序排名,相同总价排名一致
        RANK() OVER (ORDER BY SUM(oi.price) DESC) AS price_rank
    FROM ORDERS o
    INNER JOIN order_item oi ON o.id = oi.order_id
    GROUP BY o.id
) order_totals ON ord.id = order_totals.id
WHERE order_totals.price_rank = 1;

2. 仅返回单个最高总价订单

若只需返回一个订单(不管是否有并列),可使用ROWNUM,注意必须嵌套子查询(否则会先过滤再排序,导致结果错误):

SELECT ord.*
FROM ORDERS ord
WHERE ord.id = (
    SELECT o.id
    FROM (
        -- 先排序再取第一条
        SELECT o.id
        FROM ORDERS o
        INNER JOIN order_item oi ON o.id = oi.order_id
        GROUP BY o.id
        ORDER BY SUM(oi.price) DESC
    ) temp
    WHERE ROWNUM = 1
);

关于你第一个语句的问题

你第一个语句的错误在于分组逻辑:GROUP BY oi.id, ord.orderName中,ord.orderName是外层表字段,分组逻辑错误;同时按oi.id(订单项ID)分组,会导致每个订单项单独计算价格,最终得到的是单个商品价格最高的订单项对应的订单,而非订单总价最高的订单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:20