web-dev-qa-db-ja.com

postgresqlのトップ10の値をどうやって取得しますか?

私は簡単な質問があります。

私はpostgresqlデータベースを持っています:Scores(score integer)

どのようにして最も高い10のスコアを最速にすることができますか?

更新:

このクエリを複数回実行し、最速のソリューションを目指しています。

186
Joey Franklin

これには limit を使用できます。

select *
from scores
order by score desc
limit 10

パフォーマンスが重要な場合(そうでない場合は;-))スコアのインデックスを探してください。


バージョン8.4以降では、標準の( SQL:2008fetch first も使用できます。

select *
from scores
order by score desc
fetch first 10 rows only
284
Olaf Dietsche

LIMIT 句を使用して、DESCendingの順序でORDER BYを探しているようです。

SELECT
 *
FROM
  scores
ORDER BY score DESC
LIMIT 10

もちろんSELECT *はパフォーマンスに深刻な影響を与える可能性があるので、慎重に使用してください。

34

上位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
1
Raphvanns
(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)
1
kashif