WITH t AS (
SELECT
p.product_id,
p.product_name,
p.category,
-- 确保 supplier_name 不为空,关联失败时用默认值(或直接保留 NULL 后续处理)
COALESCE(s.supplier_name, 'None') AS supplier_name,
-- 限定订单日期范围,无订单时销售额为 0
COALESCE(SUM(CASE
WHEN o.order_date BETWEEN '2024-04-01' AND '2024-06-30'
THEN o.total_amount
ELSE 0
END), 0) AS q2_2024_sales_total
FROM product_info p
-- 左连接订单表:保留所有商品,即使无订单
LEFT JOIN order_info o ON p.product_id = o.product_id
-- 左连接供应商表:确保商品与供应商正确关联(需确认关联字段是否为 product_id)
LEFT JOIN supplier_info s ON p.product_id = s.product_id
GROUP BY
p.product_id,
p.product_name,
p.category,
s.supplier_name -- 分组需包含 supplier_name
)
SELECT
t.product_id,
t.product_name,
t.q2_2024_sales_total,
-- 按 category 分区,销售额降序排名(需与预期逻辑一致)
DENSE_RANK() OVER (
PARTITION BY t.category
ORDER BY t.q2_2024_sales_total DESC
) AS category_rank,
t.supplier_name
FROM t
-- 按 product_id 排序,与预期输出一致
ORDER BY t.product_id;