Tôi sẽ sử dụng một hàm cửa sổ:
select *
from (
select u.*, dense_rank() over (order by balance desc) as rnk
from users u
) t
where rnk = 2;
Tôi không nghĩ rằng sẽ có sự khác biệt lớn về hiệu suất đối với truy vấn của bạn (đặc biệt là không có chỉ mục trên balance
) nhưng theo ý kiến của tôi thì nó dễ đọc và dễ bảo trì hơn.