Tengo una pregunta simple:
Tengo una postgresql
base de datos: Scores(score integer)
.
¿Cómo obtendría los 10 puntajes más altos el más rápido?
ACTUALIZAR:
Haré esta consulta varias veces y apunto por la solución más rápida.
Tengo una pregunta simple:
Tengo una postgresql
base de datos: Scores(score integer)
.
¿Cómo obtendría los 10 puntajes más altos el más rápido?
ACTUALIZAR:
Haré esta consulta varias veces y apunto por la solución más rápida.
Respuestas:
Para esto puedes usar limit
select *
from scores
order by score desc
limit 10
Si el rendimiento es importante (cuando no lo es ;-) busque un índice de puntuación.
A partir de la versión 8.4, también puede usar el estándar ( SQL: 2008 )fetch first
select *
from scores
order by score desc
fetch first 10 rows only
Como señaló @Raphvanns, esto te dará first 10 rows
literalmente. Para eliminar valores duplicados, debe seleccionar distinct
filas, p. Ej.
select distinct *
from scores
order by score desc
fetch first 10 rows only
fetch first X rows only
es la respuesta que estaba buscando, ¡gracias desde el futuro lejano!
Parece que está buscando ORDER BY
en DESC
orden final con la cláusula LIMIT :
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Por supuesto, SELECT *
podría afectar seriamente el rendimiento, así que úselo con precaución.
Tenga en cuenta que si hay vínculos en los 10 valores principales, solo obtendrá las 10 filas superiores, no los 10 valores principales con las respuestas proporcionadas. Ej: si los 5 valores principales son 10, 11, 12, 13, 14, 15 pero sus datos contienen 10, 10, 11, 12, 13, 14, 15, solo obtendrá 10, 10, 11, 12, 13, 14 como tu top 5 con unLIMIT
Aquí hay una solución que devolverá más de 10 filas si hay empates, pero obtendrá todas las filas que some_value_column
técnicamente se encuentran en el top 10.
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
explain analyze
?