Ik zou een vensterfunctie gebruiken:
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Ik denk niet dat er een groot prestatieverschil zal zijn voor uw zoekopdracht (vooral niet met een index op balance
) maar naar mijn mening is het gemakkelijker te lezen en te onderhouden.