请求编写SQL查询:找出可装入10号纸箱的最大体积订单
解决方案
要实现找出能装入10号纸箱的最大体积订单的需求,我们可以通过分步计算+筛选的方式完成,以下是完整的SQL查询及说明:
完整SQL代码
WITH carton_limit AS ( -- 计算10号纸箱的最大容纳体积 SELECT len * width * height AS max_available_volume FROM carton WHERE carton_id = 10 ), order_calculations AS ( -- 统计每个订单的总商品体积:单商品体积×购买数量,按订单汇总 SELECT oi.order_id, SUM(p.len * p.width * p.height * oi.product_quantity) AS total_order_volume FROM order_items oi INNER JOIN product p ON oi.product_id = p.product_id GROUP BY oi.order_id ) -- 筛选出体积符合纸箱容纳要求的订单,取其中体积最大的一条 SELECT order_id, total_order_volume FROM order_calculations, carton_limit WHERE total_order_volume <= max_available_volume ORDER BY total_order_volume DESC LIMIT 1;
代码说明
- carton_limit 公共表表达式:单独计算10号纸箱的体积,作为后续判断订单能否装入的阈值。
- order_calculations 公共表表达式:关联订单表和商品表,计算每个订单中所有商品的总体积(单个商品的长×宽×高,再乘以购买数量,最后按订单求和)。
- 最终查询:将订单总体积与纸箱体积对比,只保留能装入的订单,按体积从大到小排序后取第一条,得到符合要求的最大体积订单。
如果你的数据库更推荐显式JOIN语法,也可以把最终查询改写为:
SELECT oc.order_id, oc.total_order_volume FROM order_calculations oc JOIN carton_limit cl ON oc.total_order_volume <= cl.max_available_volume ORDER BY oc.total_order_volume DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者Pree07
相关产品推荐
相关产品推荐

