comments | difficulty | edit_url | tags | |
---|---|---|---|---|
true |
中等 |
|
表:Products
+------------+---------+ | Column Name| Type | +------------+---------+ | product_id | int | | category | varchar | | price | decimal | +------------+---------+ product_id 是这张表的唯一主键。 每一行包含产品的 ID,分类以及价格。
表:Discounts
+------------+---------+ | Column Name| Type | +------------+---------+ | category | varchar | | discount | int | +------------+---------+ category 是这张表的主键。 每一行包含有一个产品分类和该分类的折扣百分比(值的范围从 0 到 100)。
编写一个解决方案来找到每个产品使用 分类折扣 后的 最终价格。如果一个产品分类 没有关联的折扣,它的价格保持 不变。
返回结果表以 product_id
升序 排序。
结果格式如下所示。
示例:
输入:
Products
表:
+------------+-------------+-------+ | product_id | category | price | +------------+-------------+-------+ | 1 | Electronics | 1000 | | 2 | Clothing | 50 | | 3 | Electronics | 1200 | | 4 | Home | 500 | +------------+-------------+-------+
Discounts
表:
+------------+----------+ | category | discount | +------------+----------+ | Electronics| 10 | | Clothing | 20 | +------------+----------+
输出:
+------------+------------+-------------+ | product_id | final_price| category | +------------+------------+-------------+ | 1 | 900 | Electronics | | 2 | 40 | Clothing | | 3 | 1080 | Electronics | | 4 | 500 | Home | +------------+------------+-------------+
解释:
- 对于产品 1,它属于电器分类,有 10% 的折扣,所以最终价格为 1000 - (10% of 1000) = 900。
- 对于产品 2,它属于衣物分类,有 20% 的折扣,所以最终价格为 50 - (20% of 50) = 40。
- 对于产品 3,它属于电器分类,有 10% 的折扣,所以最终价格为 1200 - (10% of 1200) = 1080。
- 对于产品 4,它属于家具分类,没有可用的折扣,所以最终价格仍是 500。
我们可以将 Products
表和 Discounts
表按照 category
列进行左连接,然后计算最终价格。如果某个产品的类别没有关联的折扣,那么它的价格保持不变。
# Write your MySQL query statement below
SELECT
product_id,
price * (100 - IFNULL(discount, 0)) / 100 final_price,
category
FROM
Products
LEFT JOIN Discounts USING (category)
ORDER BY 1;
import pandas as pd
def calculate_final_prices(
products: pd.DataFrame, discounts: pd.DataFrame
) -> pd.DataFrame:
# Perform a left join on the 'category' column
merged_df = pd.merge(products, discounts, on="category", how="left")
# Calculate the final price
merged_df["final_price"] = (
merged_df["price"] * (100 - merged_df["discount"].fillna(0)) / 100
)
# Select the necessary columns and sort by 'product_id'
result_df = merged_df[["product_id", "final_price", "category"]].sort_values(
"product_id"
)
return result_df