web-dev-qa-db-fra.com

Comment obtenir le top 10 des valeurs dans postgresql?

J'ai une question simple:

J'ai unpostgresqldatabase: Scores(score integer).

Comment pourrais-je obtenir les 10 meilleurs scores le plus rapide? 

METTRE À JOUR:  

Je ferai cette requête plusieurs fois et je vise la solution la plus rapide.

166
Joey Franklin

Pour cela, vous pouvez utiliser limit

select *
from scores
order by score desc
limit 10

Si la performance est importante (quand n'est-ce pas ;-), recherchez un index sur le score.


À partir de la version 8.4, vous pouvez également utiliser le standard ( SQL: 2008 ) fetch first

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

Il semble que vous cherchiez ORDER BY dans DESCend ordre avec LIMIT clause:

SELECT
 *
FROM
  scores
ORDER BY score DESC
LIMIT 10

Bien entendu, SELECT * pourrait sérieusement affecter les performances, utilisez-le avec prudence.

34
Grzegorz Gierlik

Notez que s'il y a des liens dans les 10 premières valeurs, vous obtiendrez uniquement les 10 premières lignes, pas les 10 meilleures valeurs avec les réponses fournies . Ex: si les 5 premières valeurs sont 10, 11, 12 , 13, 14, 15 mais vos données contiennent 10, 10, 11, 12, 13, 14, 15, vous n’obtiendrez que 10, 10, 11, 12, 13, 14 dans le top 5 avec un LIMIT

Voici une solution qui renverra plus de 10 lignes s'il y a des liens, mais vous obtiendrez toutes les lignes où some_value_column est techniquement dans les 10 premiers.

select 
 *
from
  (select
     *,
     rank() (order by some_value_column desc) as my_rank
  from
     mytable) subquery
where my_rank <= 10
0
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)
0
kashif