-- 逻辑拆解:时间条件2024年上半年,需要聚合的字段:按商品分组的总销量+月均销量+单月最高+单月最低
WITH monthly_total_max AS(
SELECT
t1.product_id,
t2.quantity,
DENSE_RANK() OVER(partition by t1.product_id order by t2.quantity DESC) rk1
FROM products_underline t1
LEFT JOIN sales_underline t2
ON t1.product_id = t2.product_id
WHERE t2.sale_month BETWEEN '2024-01' AND '2024-06'
),
monthly_total_min AS(
SELECT
t1.product_id,
t2.quantity,
DENSE_RANK() OVER(partition by t1.product_id order by t2.quantity asc) rk2
FROM products_underline t1
LEFT JOIN sales_underline t2
ON t1.product_id = t2.product_id
WHERE t2.sale_month BETWEEN '2024-01' AND '2024-06'
),
total AS(
SELECT
t1.product_id,
t1.product_name,
SUM(t2.quantity) total_sales,
ROUND(AVG(t2.quantity),0) avg_monthly_sales
FROM products_underline t1
LEFT JOIN sales_underline t2
ON t1.product_id = t2.product_id
WHERE t2.sale_month BETWEEN '2024-01' AND '2024-06'
GROUP BY t1.product_id
)
SELECT
t1.product_id,
t1.product_name,
t1.total_sales,
t2.quantity max_monthly_sales,
t3.quantity min_monthly_sales,
t1.avg_monthly_sales
FROM total t1
LEFT JOIN monthly_total_max t2
ON t1.product_id = t2.product_id
LEFT JOIN monthly_total_min t3
ON t1.product_id = t3.product_id
WHERE t2.rk1 = 1
AND t3.rk2 = 1
ORDER BY t1.product_id