Použil bych funkci okna:
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Nemyslím si, že ve vašem dotazu bude velký rozdíl ve výkonu (zejména ne s indexem na balance
), ale podle mého názoru je to jednodušší na čtení a údržbu.