力扣1571-仓库经理
但题目要求的是某产品在所有仓库存放的总体积,因此可以把一个产品在所有仓库中贡献的体积统一算成一个值: 产品总体积 = width × length × height。仓库LCHouse1: 1个单位的LC-TV + 10个单位的LC-KeyChain + 5个单位的LC-Phone.仓库LCHouse2: 2个单位的LC-TV + 2个单位的LC-KeyChain.Id为4的商品(LC-T-Shi
·
表: Warehouse
+--------------+---------+ | Column Name | Type | +--------------+---------+ | name | varchar | | product_id | int | | units | int | +--------------+---------+ (name, product_id) 是该表主键(具有唯一值的列的组合). 该表的行包含了每个仓库的所有商品信息.
表: Products
+---------------+---------+ | Column Name | Type | +---------------+---------+ | product_id | int | | product_name | varchar | | Width | int | | Length | int | | Height | int | +---------------+---------+ product_id 是该表主键(具有唯一值的列). 该表的行包含了每件商品以英尺为单位的尺寸(宽度, 长度和高度)信息.
编写解决方案报告每个仓库的存货量是多少立方英尺。
返回结果没有顺序要求。
返回结果格式如下例所示。
示例 1:
输入: Warehouse 表: +------------+--------------+-------------+ | name | product_id | units | +------------+--------------+-------------+ | LCHouse1 | 1 | 1 | | LCHouse1 | 2 | 10 | | LCHouse1 | 3 | 5 | | LCHouse2 | 1 | 2 | | LCHouse2 | 2 | 2 | | LCHouse3 | 4 | 1 | +------------+--------------+-------------+ Products 表: +------------+--------------+------------+----------+-----------+ | product_id | product_name | Width | Length | Height | +------------+--------------+------------+----------+-----------+ | 1 | LC-TV | 5 | 50 | 40 | | 2 | LC-KeyChain | 5 | 5 | 5 | | 3 | LC-Phone | 2 | 10 | 10 | | 4 | LC-T-Shirt | 4 | 10 | 20 | +------------+--------------+------------+----------+-----------+ 输出: +----------------+------------+ | warehouse_name| volume| +----------------+------------+ | LCHouse1 | 12250 | | LCHouse2 | 20250 | | LCHouse3 | 800 | +----------------+------------+ 解释: Id为1的商品(LC-TV)的存货量为 5x50x40 = 10000 Id为2的商品(LC-KeyChain)的存货量为 5x5x5 = 125 Id为3的商品(LC-Phone)的存货量为 2x10x10 = 200 Id为4的商品(LC-T-Shirt)的存货量为 4x10x20 = 800 仓库LCHouse1: 1个单位的LC-TV + 10个单位的LC-KeyChain + 5个单位的LC-Phone. 总存货量为: 1*10000 + 10*125 + 5*200 = 12250 立方英尺 仓库LCHouse2: 2个单位的LC-TV + 2个单位的LC-KeyChain. 总存货量为: 2*10000 + 2*125 = 20250 立方英尺 仓库LCHouse3: 1个单位的LC-T-Shirt. 总存货量为: 1*800 = 800 立方英尺.
思路:
1、需要先把每个产品的体积算出来。
但题目要求的是某产品在所有仓库存放的总体积,因此可以把一个产品在所有仓库中贡献的体积统一算成一个值: 产品总体积 = width × length × height。
因为产品表可能有重复产品 id,需要 group by product_id。
于是建立一个中间表 t:
按产品分组,计算每个产品的体积汇总 sum_tot。
2、将中间表 t 与仓库表 warehouse 进行 product_id 的关联。关联后,就能拿到某产品在某个仓库的存放数量 units。
3、用 sum(sum_tot × units) 求出某仓库所有产品的总体积。按仓库名称 group by name。
代码:
with t as(
select
product_id,
sum(width*length*height) as sum_tot
from products
group by product_id
)
select
name as warehouse_name,
sum(sum_tot * units) as volume
from t join warehouse t2 on t.product_id = t2.product_id
group by name
;
更多推荐



所有评论(0)