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.
sql
postgresql
sql-limit
Joey Franklin
fuente
fuente
explain analyze
?Respuestas:
Para esto puedes usar limit
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
Como señaló @Raphvanns, esto te dará
first 10 rows
literalmente. Para eliminar valores duplicados, debe seleccionardistinct
filas, p. Ej.Violín de SQL
fuente
fetch first X rows only
es la respuesta que estaba buscando, ¡gracias desde el futuro lejano!Parece que está buscando
ORDER BY
enDESC
orden final con la cláusula LIMIT :Por supuesto,
SELECT *
podría afectar seriamente el rendimiento, así que úselo con precaución.fuente
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 un
LIMIT
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.fuente
fuente