假设您受聘为亚马逊的数据分析师。亚马逊希望最大限度地增加 500,000 平方英尺仓库中的商品数量。它希望库存尽可能多的主要商品,然后使用剩余的面积来库存大部分非主要商品。 作为他们的数据分析师,您的任务是编写一个查询来查找 500,000 平方英尺的仓库中可以存储的主要和非主要物品的数量。输出带有 prime_eligible 的商品类型,后跟 not_prime 以及可以库存的最大商品数量。对于此任务,您可以假设以下内容。
表 INVENTORY 的数据字典
列名称 | 类型 |
---|---|
item_id | 整数 |
项目类型 | 绳子 |
商品类别 | 绳子 |
平方英尺 | 十进制 |
表格输入:
item_id | 项目类型 | 商品类别 | 平方英尺 |
---|---|---|---|
1374 | prime_资格 | 迷你冰箱 | 68.00 |
4245 | 非_prime | 立灯 | 26.40 |
2452 | prime_资格 | 电视 | 85.00 |
3255 | 非_prime | 边桌 | 22.60 |
1672 | prime_资格 | 笔记本电脑 | 8.50 |
预期表输出:
项目类型 | item_count |
---|---|
prime_资格 | 9285 |
非_prime | 6 |
尝试过:
WITH cte AS (
SELECT
item_type,
CASE
WHEN item_type = 'prime_eligible' THEN 'prime'
ELSE 'not_prime'
END AS category,
SUM(square_footage) AS total_square_footage
FROM
INVENTORY
GROUP BY
item_type
)
SELECT
category AS item_type,
FLOOR(500000 / 2 / MIN(total_square_footage)) AS item_count
FROM
cte
GROUP BY
category;
输出为
项目类型 | item_count |
---|---|
非_prime | 5102 |
总理 | 1547 |
您需要先计算素数,然后用余数计算非素数。
再写几个 CTE 来分别计算它们,然后合并结果。
在您的公式中,您实际上是在黄金和非黄金相等的占地面积下提供了最小平方英尺的项目。 如果您的 prime 预期输出为 9K+,则情况就不可能如此。 根据预期的输出,您将最大化 prime 所使用的平方英尺。
这是解决此类问题的一种方法:
WITH inventory1 AS (
SELECT
item_type, count(*)as item_cnt,
SUM(square_footage) AS total_square_footage
FROM INVENTORY
GROUP BY item_type
), prime_items as (
SELECT item_type,
floor((500000 / total_square_footage))*item_cnt AS item_cnt,
floor((500000 / total_square_footage))*total_square_footage AS total_square_footage
FROM inventory1
WHERE item_type='prime_eligible'
)
select item_type, item_cnt
from prime_items
union all
select item_type, floor((500000-(select total_square_footage from prime_items))/total_square_footage)*item_cnt
from inventory1
where item_type='not_prime';
希望有帮助。