Saya akan menggunakan fungsi jendela:
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Saya tidak berpikir akan ada perbedaan kinerja yang besar untuk kueri Anda (terutama tidak dengan indeks pada balance
) tetapi menurut saya lebih mudah untuk dibaca dan dipelihara.