题解 | 统计每个产品的销售情况
统计每个产品的销售情况
https://www.nowcoder.com/practice/d431aa7bf72c4fd7b048ec639bc83ad2
with a as(
select
o.product_id,
round(sum(o.quantity*p.unit_price),2) total_sales,
p.unit_price,
sum(o.quantity) total_quantity,
round(sum(o.quantity*p.unit_price)/12,2) avg_monthly_sales
from orders o
left join products p
on o.product_id = p.product_id
group by o.product_id,p.unit_price
), b as
(
select
c.customer_id,
o.product_id,
sum(o.quantity) max_num,
month(o.order_date) date,
rank() over (partition by o.product_id order by sum(o.quantity) desc) rk,
case
when c.customer_age between 1 and 10 then '1-10'
when c.customer_age between 11 and 20 then '11-20'
when c.customer_age between 21 and 30 then '21-30'
when c.customer_age between 31 and 40 then '31-40'
when c.customer_age between 41 and 50 then '41-50'
when c.customer_age between 51 and 60 then '51-60'
else '61+'
end customer_age_group
from customers c
left join orders o
on c.customer_id = o.customer_id
where year(o.order_date) = '2023'
group by
c.customer_id,
o.product_id,
month(o.order_date),
c.customer_age
), c as (
select
a.product_id,
a.total_sales,
a.unit_price,
a.total_quantity,
a.avg_monthly_sales,
b.max_num max_monthly_quantity,
customer_age_group,
dense_rank() over (partition by a.product_id order by b.customer_age_group asc) rn
from a
left join b
on a.product_id = b.product_id
where rk = 1
)
select
product_id,
total_sales,
unit_price,
total_quantity,
avg_monthly_sales,
max_monthly_quantity,
customer_age_group
from c
where rn = 1
order by total_sales desc,product_id
这题怎么说呢,又臭又长

