J'ai une question simple:
J'ai unpostgresql
database: 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.
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
Il semble que vous cherchiez ORDER BY
dans DESC
end 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.
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
(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)