Saya punya pertanyaan sederhana:
Saya memiliki postgresql
database yang: Scores(score integer)
.
Bagaimana saya mendapatkan skor tertinggi 10 tercepat?
MEMPERBARUI:
Saya akan melakukan kueri ini beberapa kali dan mengincar solusi tercepat.
Saya punya pertanyaan sederhana:
Saya memiliki postgresql
database yang: Scores(score integer)
.
Bagaimana saya mendapatkan skor tertinggi 10 tercepat?
MEMPERBARUI:
Saya akan melakukan kueri ini beberapa kali dan mengincar solusi tercepat.
Jawaban:
Untuk ini, Anda dapat menggunakan batas
select *
from scores
order by score desc
limit 10
Jika kinerja penting (padahal bukan ;-) cari indeks skor.
Mulai dengan versi 8.4, Anda juga dapat menggunakan standar ( SQL: 2008 )fetch first
select *
from scores
order by score desc
fetch first 10 rows only
Seperti yang ditunjukkan oleh @Raphvanns, ini akan memberi Anda arti first 10 rows
sebenarnya. Untuk menghapus nilai duplikat, Anda harus memilih distinct
baris, misalnya
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows only
adalah jawaban yang saya cari - terima kasih dari masa depan yang jauh!
Sepertinya Anda mencari ORDER BY
di DESC
berakhir pesanan dengan LIMIT klausa:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Tentu saja SELECT *
dapat memengaruhi kinerja secara serius, jadi gunakan dengan hati-hati.
Perhatikan bahwa jika ada ikatan dalam 10 nilai teratas, Anda hanya akan mendapatkan 10 baris teratas, bukan 10 nilai teratas dengan jawaban yang diberikan. Mis: jika 5 nilai teratas adalah 10, 11, 12, 13, 14, 15 tetapi data Anda berisi 10, 10, 11, 12, 13, 14, 15 Anda hanya akan mendapatkan 10, 10, 11, 12, 13, 14 sebagai top 5 Anda dengan aLIMIT
Berikut adalah solusi yang akan mengembalikan lebih dari 10 baris jika ada ikatan tetapi Anda akan mendapatkan semua baris di mana some_value_column
secara teknis berada di atas 10.
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze
?