with result_tbl as
(select assets.asset_name ,sw.swap_program, count(DISTINCT sw.pool_address) as pool_count
from algorand.swaps sw
join algorand.account_asset assets on assets.asset_id = sw.swap_to_asset_id
where date(block_timestamp) >= '2022-01-01'
and sw.swap_from_amount > 0
group by assets.asset_name, sw.swap_program
order by pool_count DESC
)
select * from (
select asset_name, row_number() over (partition by swap_program order by pool_count desc) as rank, swap_program, concat(rank,' - ', swap_program) as dex_rank, pool_count
from result_tbl) ranks
where rank <= 5
Order by rank, swap_program