我不知道如何查询,我只能找到纸箱10的体积

问题描述 投票:0回答:2

产品表

## 产品 ID ## ## 莱恩 ## ## 宽度 ## ## 身高 ##
239 350 300 100
240 80 80 150

这是一个示例产品表,我已经给了你相关的列。这个实际的表有 60 行这样的信息。

订单商品表

## 订单 ID ## ## 产品 ID ## ## 产品_数量##
10001 237 1
10002 240 3
10003 247 4

这是一个示例 order_items 表,其中产品数量是针对该特定 order_id 销售的商品数量。

纸箱桌

## 纸箱_id ## ## 莱恩 ## ## 宽度 ## ## 身高 ##
10 600 300 100
20 80 80 150

carton_id 10 具有长、宽、高的实际值。

查询是: 编写一个查询来显示 order_id 和可以容纳在 carton id 10 中的最大订单的体积(以体积计)。最终输出预计为 1 行。

我无法做更多的事情,这太令人困惑了。请帮忙

select (c.len*c.width*c.height) as Max_volume 
from carton c 
where c.carton_id = 10;
sql mysql sql-order-by inner-join
2个回答
0
投票

如果每个订单中始终只有一种产品(如示例数据所示),则一个选项是加入和过滤。

select o.order_id, p.len * p.width * p.height volume
from order_items o
inner join products p on p.product_id = o.product_id
inner join cartons c on c.len >= p.len and c.width >= p.width and c.height >= p.height
where c.carton_id = 10
order by volume desc limit 1

查询过滤符合纸箱 10 的产品订单(即产品的三个尺寸均小于纸箱的尺寸),然后按体积降序排序,仅保留第一行。


0
投票
SELECT  
    OI.ORDER_ID,
    MAX(P.LEN *  P.WIDTH * P.HEIGHT) AS BIGGEST_VOLUME
FROM
    ORDER_ITEMS OI
JOIN 
    PRODUCT P ON OI.PRODUCT_ID = P.PRODUCT_ID
JOIN
    CARTON C ON P.LEN <= C.LEN AND P.WIDTH <= C.WIDTH AND P.HEIGHT <= C.HEIGHT
WHERE 
    C.CARTON_ID=10
GROUP BY
    OI.ORDER_ID
ORDER BY
    BIGGEST_VOLUME DESC
LIMIT 1;

它选择 ORDER_ID 并使用产品尺寸计算每个订单商品的体积,然后找到可放入 Carton ID 10 的订单中的最大体积。 GROUP BY 子句确保单独考虑每个订单,并且 ORDER BY 子句按数量降序对结果进行排序。最后,LIMIT 1确保只返回交易量最大的订单。

© www.soinside.com 2019 - 2024. All rights reserved.