Basit bir sorum var:
Bir var postgresql
bir veritabanı: Scores(score integer)
.
En yüksek 10 puanı en hızlı nasıl alabilirim?
GÜNCELLEME:
Bu sorguyu birden çok kez yapacağım ve en hızlı çözümü hedefliyorum.
Basit bir sorum var:
Bir var postgresql
bir veritabanı: Scores(score integer)
.
En yüksek 10 puanı en hızlı nasıl alabilirim?
GÜNCELLEME:
Bu sorguyu birden çok kez yapacağım ve en hızlı çözümü hedefliyorum.
Yanıtlar:
Bunun için limit kullanabilirsiniz
select *
from scores
order by score desc
limit 10
Performans önemliyse (ne zaman değildir ;-) puan üzerinde bir dizin arayın.
8.4 sürümünden başlayarak standardı da kullanabilirsiniz ( SQL: 2008 )fetch first
select *
from scores
order by score desc
fetch first 10 rows only
@ Raphvanns'ın işaret ettiği gibi, bu size first 10 rows
tam anlamıyla verecektir . Yinelenen değerleri kaldırmak için distinct
satır seçmeniz gerekir ; ör.
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows only
aradığım cevap - uzak gelecekten teşekkür ederim!
Aradığınız görünüyor ORDER BY
içinde DESC
olan düzeni biten SINIR maddesi:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Elbette SELECT *
performansı ciddi şekilde etkileyebilir, bu yüzden dikkatli kullanın.
Not ilk 10 değerlerinde bağlar varsa, sadece en iyi 10 satır değil, ilk 10 alacak değerlerini sağlanan cevapları ile. Örneğin: ilk 5 değer 10, 11, 12, 13, 14, 15 ise ancak verileriniz 10, 10, 11, 12, 13, 14, 15 içeriyorsa, yalnızca 10, 10, 11, 12, 13, 14 ile ilk 5LIMIT
Bağlar varsa 10'dan fazla satır döndürecek bir çözüm var ama some_value_column
teknik olarak ilk 10'da yer alan tüm satırları alacaksınız .
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze
?