with
    t1 as (
        select
            product_id,
            customer_age_group
        from
            (
                select
                    rank() over (
                        partition by
                            product_id
                        order by
                            sa desc,customer_age_group
                    ) as r,
                    product_id,
                    customer_age_group
                from
                    (
                        select
                            product_id,
                            
                            sum(quantity) as sa,
                            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
                            customers
                            join orders using (customer_id)
                        where
                            year(order_date) = 2023
                        group by
                        product_id,
                                                        customer_age_group
                        order by
                            product_id
                    ) as t
            ) as tem
        where
            r = 1
    ),
    t2 as (
        select
            product_id,
            max(mo) as max_monthly_quantity
        from
            (
                select
                    product_id,
                    month(order_date) as month,
                    sum(quantity) as mo
                from
                    orders
                where
                    year(order_date) = 2023
                group by
                    product_id,
                    month(order_date)
                order by
                    product_id
            ) as monthly_sales
        group by
            product_id
    ),

    t3 as (
        select
            product_id,
            sum(unit_price * quantity) as total_sales,
            unit_price,
            sum(quantity) as total_quantity,
            round(sum(quantity * unit_price) / 12, 2) as avg_monthly_sales
        from
            customers
            join orders using (customer_id)
            join products using (product_id)
        group by
            product_id,
            unit_price
        
    )
  select product_id
  ,total_sales
  ,unit_price
  ,total_quantity
  ,avg_monthly_sales
  ,max_monthly_quantity
  ,customer_age_group
  from t1 join t2  using(product_id)
  join t3 using(product_id)
  order by
            total_sales DESC,
            product_id