with t as (
    select product_id, unit_price, sum(quantity) as qty
    from sales_orders
    where year(order_date)=2023
    group by product_id, unit_price
), temp as (
    select t.product_id, 
    (unit_price-purchase_price)*qty as total_profit, 
    round((unit_price-purchase_price)/purchase_price*100, 2) as profit_margin
    from t
    join purchase_prices b on t.product_id=b.product_id
    order by t.product_id
)
select product_id, 
round(sum(total_profit), 2) as total_profit, 
round(avg(profit_margin), 2) as profit_margin
from temp
group by product_id
order by product_id