Jag skulle använda en fönsterfunktion:
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Jag tror inte att det kommer att vara någon stor prestandaskillnad för din fråga (särskilt inte med ett index på balance
) men enligt mig är det lättare att läsa och underhålla.