私は簡単な質問があります。
私はpostgresql
データベースを持っています:Scores(score integer)
。
どのようにして最も高い10のスコアを最速にすることができますか?
更新:
このクエリを複数回実行し、最速のソリューションを目指しています。
これには limit を使用できます。
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
LIMIT 句を使用して、DESC
endingの順序でORDER BY
を探しているようです。
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、 LIMIT
であなたのトップ5として14
これは、同点がある場合に10を超える行を返すソリューションですが、some_value_column
が技術的にトップ10にあるすべての行を取得します。
select
*
from
(select
*,
rank() (order by some_value_column desc) as my_rank
from
mytable) subquery
where my_rank <= 10
(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date DESC
LIMIT 10)
UNION ALL
(SELECT <some columns>
FROM mytable
<maybe some joins here>
WHERE <various conditions>
ORDER BY date ASC
LIMIT 10)