【发布时间】:2021-02-13 09:07:00
【问题描述】:
很抱歉重新上传了这个问题,但我真的很想得到答案。
请允许我再次问这个问题,希望您的支持。
问题是找到合适尺寸的盒子,让物流业务在运输时节省资金。
我们有 2 张桌子,分别是盒子和产品。
Boxes 表包含每个盒子的每个 ID 和尺寸。 “w”代表宽,“d”代表深度,“h”代表高度。为方便起见,请假设我们只有 3 盒样品。
产品表还包括产品 ID、尺寸。尺寸与盒子表的含义相同。 'layable' 是指产品不仅可以直接包装,还可以包装。例如,产品“g”是一个易碎的瓶子,无法在盒子中放置水平位置。因此,这是可放置列中的“n”。
这道题需要查询每个商品ID与正确的尺寸框。 尺寸合适的盒子意味着产品需要用空间最小的盒子发货。
希望您的帮助。谢谢。
盒子:
| BOX_SIZE | W | D | H |
|---|---|---|---|
| S | 353 | 250 | 25 |
| M | 450 | 350 | 160 |
| L | 610 | 460 | 460 |
产品:
| ID | W | D | H | LAYABLE |
|---|---|---|---|---|
| a | 350 | 250 | 25 | y |
| b | 450 | 250 | 160 | y |
| c | 510 | 450 | 450 | y |
| d | 350 | 250 | 25 | y |
| e | 550 | 350 | 160 | y |
| f | 410 | 400 | 430 | n |
| g | 350 | 240 | 25 | n |
| h | 450 | 350 | 160 | n |
| i | 310 | 360 | 430 | n |
| j | 500 | 500 | 600 | y |
预期输出:
| ID | BOX_SIZE |
|---|---|
| a | S |
| b | M |
| ... | .... |
| ... | .... |
| ... | .... |
| g | S |
| h | M |
| i | L |
| j | not available |
创建和填充测试表的语句:
create table boxes
( box_size char(1) primary key
, w number not null
, d number not null
, h number not null
)
;
insert into boxes (box_size, w, d, h) values ('S', 353, 250, 25);
insert into boxes (box_size, w, d, h) values ('M', 450, 350, 160);
insert into boxes (box_size, w, d, h) values ('L', 610, 460, 460);
create table products
( id varchar2(10) primary key
, w number not null
, d number not null
, h number not null
, layable char(1) check(layable in ('y', 'n'))
)
;
insert into products (id, w, d, h, layable) values ('a', 350, 250, 25, 'y');
insert into products (id, w, d, h, layable) values ('b', 450, 250, 160, 'y');
insert into products (id, w, d, h, layable) values ('c', 510, 450, 450, 'y');
insert into products (id, w, d, h, layable) values ('d', 350, 250, 25, 'y');
insert into products (id, w, d, h, layable) values ('e', 550, 350, 160, 'y');
insert into products (id, w, d, h, layable) values ('f', 410, 400, 430, 'n');
insert into products (id, w, d, h, layable) values ('g', 350, 240, 25, 'n');
insert into products (id, w, d, h, layable) values ('h', 450, 350, 160, 'n');
insert into products (id, w, d, h, layable) values ('i', 310, 360, 430, 'n');
insert into products (id, w, d, h, layable) values ('j', 500, 500, 600, 'y');
commit;
【问题讨论】:
-
有趣的问题!我想我了解“可铺设与不可铺设”的业务;对于不可铺设的物品,宽度和深度可以互换,但高度不能互换,而对于可铺设的物品,所有三个尺寸都是可以互换的。然后,您谈论“最小空间”;那是怎么定义的?我猜至少是 VOLUME,但我在您的查询中没有看到体积计算。
-
我编辑了您的问题,添加了
create table和insert语句以重新创建测试数据。像您发布的图像看起来不错,但不是很有帮助;请养成以我添加的格式提供数据的习惯。 (如果除了您还添加格式中的表格,那可能是最好的选择。)还要注意我将列名 size 更改为 box_size ,因为 size 是 Oracle 中的保留关键字;它不应该用作表名或列名。 -
回到“最小空间”——我想我明白了。在您的情况下,盒子尺寸 S、M、L 的所有尺寸都按严格递增的顺序排列,因此没有歧义。尽可能使用 S,如果没有,则尽可能使用 M,或者如果这也不可能,使用 L。或者报告“不可用”。
-
再补充一点 - 我进一步编辑了您的问题,以添加一种不适合任何盒子的产品。您的测试数据应始终包含此类特殊情况。 (您甚至提到了这种可能性,只是您的示例中没有包含示例。)
-
感谢您提供详细的 cmets。一切看起来清晰合理。我应该用测试数据制作
create table。通过“最小空间”,您可以很好地理解我试图解释的内容。谢谢。