题解 | 统计每个产品的销售情况

统计每个产品的销售情况

https://www.nowcoder.com/practice/d431aa7bf72c4fd7b048ec639bc83ad2

select
    t1.product_id,
    total_sales,
    unit_price,
    total_quantity,
    avg_monthly_sales,
    max_monthly_quantity,
    customer_age_group
from
    (
        select
            a.product_id,
            sum(quantity * unit_price) as total_sales,
            max(unit_price) as unit_price,
            sum(quantity) as total_quantity,
            round(sum(quantity * unit_price) / 12, 2) as avg_monthly_sales
        from
            orders a
            left join customers b using (customer_id)
            left join products c using (product_id)
        where
            year (order_date) = 2023
        group by
            a.product_id
    ) t1
    join (
        select
            product_id,
            max(y_quantity) as max_monthly_quantity
        from
            (
                select
                    a.product_id,
                    month (order_date),
                    sum(quantity) as y_quantity
                from
                    orders a
                    left join customers b using (customer_id)
                    left join products c using (product_id)
                where
                    year (order_date) = 2023
                group by
                    a.product_id,
                    month (order_date)
            ) d
        group by
            product_id
    ) t2 using (product_id)
    join (
        select
            product_id,
            case
                when customer_age between 1 and 10  then '1-10'
                when customer_age between 11 and 20  then '11-20'
                when customer_age between 21 and 30  then '21-30'
                when customer_age between 31 and 40  then '31-40'
                when customer_age between 41 and 50  then '41-50'
                when customer_age between 51 and 60  then '51-60'
                else '61+'
            end as customer_age_group
        from
            (
                select
                    product_id,
                    customer_age,
                    dense_rank() over (
                        partition by
                            product_id
                        order by
                            quantity desc,
                            customer_age
                    ) as rk
                from
                    (
                        select
                            a.product_id,
                            a.customer_id,
                            customer_age,
                            sum(quantity) as quantity
                        from
                            orders a
                            left join customers b using (customer_id)
                            left join products c using (product_id)
                        where
                            year (order_date) = 2023
                        group by
                            a.product_id,
                            a.customer_id,
                            customer_age
                    ) d
            ) e
        where
            rk = 1
    ) t3 using (product_id)
order by
    total_sales desc,
    t1.product_id

写过最长的代码。。。

全部评论

相关推荐

04-16 12:49
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:1600一个月?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务