with tmp as(
    select
        i.store_id,
        i.store_name,
        i.city,
        t.sku_id,
        coalesce(round(sum(s.qty),2),0) as last7d_qty,
        coalesce(round(sum(s.qty)/7,2),0) as avg_daily_qty,
        row_number() over(partition by i.store_id order by coalesce(round(sum(s.qty),2),0) desc,t.sku_id) as rank_in_store
    from store_info_ i
    left join store_stock_ t on i.store_id=t.store_id
    left join sales_daily_ s on i.store_id=s.store_id and t.sku_id=s.sku_id and datediff(t.snapshot_date,s.sale_date) between 0 and 6
    group by i.store_id,i.store_name,i.city,t.sku_id)

select
    m.store_id,
    m.store_name,
    m.city,
    m.sku_id,
    m.last7d_qty,
    m.avg_daily_qty,
    t.stock_qty,
    case
        when m.avg_daily_qty>0 then round(t.stock_qty/m.avg_daily_qty,1) 
        else null end as coverage_days,
    m.rank_in_store
from store_stock_ t right join tmp m on t.store_id=m.store_id and t.sku_id=m.sku_id
where m.rank_in_store<=3