唯一麻烦的就是按年龄占比,采用SUM()OVER
对商品的销售情况进行深度分析
https://www.nowcoder.com/practice/d6ced1b60af64a4998169ae717672e8e
- sum(sum(sa.quantity * sa.price)) over(partition by pd.category)
- 是一个窗口函数,它对每个 pd.category 分组内的 sum(sa.quantity * sa.price) 的结果再次求和。
- 由于 over(partition by pd.category) 的存在,这个窗口函数会为每个分组内的每一行返回该分组的 sum(sa.quantity * sa.price) 的总和。
select
pd.category as product_category,
ci.age_group as age_group,
sum(quantity*price) as total_sales_amount,
round(
sum( sa.quantity * sa.price)/
sum(sum(sa.quantity * sa.price))over(partition by pd.category),2
) as purchase_percentage
from
products as pd
join sales as sa on sa.product_id = pd.product_id
join customer_info as ci on ci.sale_id = sa.sale_id
group by
pd.category,ci.age_group
order by
product_category,purchase_percentage desc
