J'utiliserais une fonction de fenêtre :
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Je ne pense pas qu'il y aura une grande différence de performances pour votre requête (surtout pas avec un index sur balance
) mais à mon avis c'est plus facile à lire et à maintenir.