SQL 查询可根据平方英尺最大化仓库中主要和非主要物品的存储容量

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

假设您受聘为亚马逊的数据分析师。亚马逊希望最大限度地增加 500,000 平方英尺仓库中的商品数量。它希望库存尽可能多的主要商品,然后使用剩余的面积来库存大部分非主要商品。 作为他们的数据分析师,您的任务是编写一个查询来查找 500,000 平方英尺的仓库中可以存储的主要和非主要物品的数量。输出带有 prime_eligible 的商品类型,后跟 not_prime 以及可以库存的最大商品数量。对于此任务,您可以假设以下内容。

  1. 优质物品和非优质物品必须等量存储,无论其大小或平方英尺如何。这意味着主要物品将与非主要物品分开存放在各自的容器中,但在每个容器内,所有物品的数量必须相同。
  2. 非主要商品必须始终有库存以满足客户的需求,因此非主要商品数量不应为零。
  3. 项目计数应为整数(整数)。

表 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
sql database square
2个回答
0
投票

您需要先计算素数,然后用余数计算非素数。

再写几个 CTE 来分别计算它们,然后合并结果。

在您的公式中,您实际上是在黄金和非黄金相等的占地面积下提供了最小平方英尺的项目。 如果您的 prime 预期输出为 9K+,则情况就不可能如此。 根据预期的输出,您将最大化 prime 所使用的平方英尺。


0
投票

这是解决此类问题的一种方法:

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';

希望有帮助。

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