私は簡単な質問があります:
postgresql
データベースがあります:Scores(score integer)
。
最も高い10のスコアを最も速く取得するにはどうすればよいですか?
更新:
このクエリを複数回実行し、最速のソリューションを目指しています。
私は簡単な質問があります:
postgresql
データベースがあります:Scores(score integer)
。
最も高い10のスコアを最も速く取得するにはどうすればよいですか?
更新:
このクエリを複数回実行し、最速のソリューションを目指しています。
回答:
これには制限を使用できます
select *
from scores
order by score desc
limit 10
パフォーマンスが重要な場合(そうでない場合は;-)、スコアのインデックスを探します。
バージョン8.4以降では、標準(SQL:2008)も使用できますfetch first
select *
from scores
order by score desc
fetch first 10 rows only
@Raphvannsが指摘したように、これはfirst 10 rows
文字通りあなたに与えるでしょう。重複する値を削除するには、distinct
行を選択する必要があります。
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows only
私が探していた答えです-遠い未来からありがとう!
LIMIT句ORDER BY
でDESC
終了順に探しているようです:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
もちろんSELECT *
パフォーマンスに深刻な影響を与える可能性があるため、注意して使用してください。
トップ10値の結びつきがある場合は、あなただけの上位10行ではなく、トップ10を取得することに注意してください値を提供答えを。例:上位5つの値が10、11、12、13、14、15であるが、データに10、10、11、12、13、14、15が含まれている場合、10、10、11、12、13、13のみが取得されます。 14あなたのトップ5としてLIMIT
これは、タイがある場合に10行を超えるsome_value_column
が、技術的にはトップ10にあるすべての行を取得するソリューションです。
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze
ですか