如何用SQL从OM数据库查询金额最高的订单ID及订单总额?
解决方法
错误原因
你写的SQL报错是因为:使用聚合函数SUM()时,非聚合字段order_id没有通过GROUP BY分组。数据库无法将单个订单ID和全局的总价计算结果对应,必须按order_id分组,才能计算每个订单的总金额。
正确SQL写法
方法1:适用于大多数数据库(取单个最高额订单)
SELECT order_id, SUM(unit_price) AS total_amount FROM items GROUP BY order_id ORDER BY total_amount DESC LIMIT 1;
GROUP BY order_id:将同一订单的所有记录归为一组SUM(unit_price):计算每组(每个订单)的总金额,用AS total_amount给结果起别名方便排序ORDER BY total_amount DESC:按总金额从高到低排序LIMIT 1:只取排序后的第一条,就是金额最高的订单
方法2:支持窗口函数的数据库(可返回多个并列最高的订单)
如果存在多个订单总金额相同且都是最高的,用这个方法可以把它们都查出来:
SELECT order_id, total_amount FROM ( SELECT order_id, SUM(unit_price) AS total_amount, RANK() OVER (ORDER BY SUM(unit_price) DESC) AS rnk FROM items GROUP BY order_id ) ranked WHERE rnk = 1;
- 子查询里先按订单分组计算总额,同时用
RANK()窗口函数给每个订单按总额降序排名 - 外层查询筛选排名为1的记录,就能得到所有最高额的订单
内容的提问来源于stack exchange,提问作者CodingMonstor
相关产品推荐
相关产品推荐

