Ich habe eine einfache Frage:
Ich habe eine postgresql
Datenbank : Scores(score integer)
.
Wie würde ich die höchsten 10 Punkte am schnellsten erzielen?
AKTUALISIEREN:
Ich werde diese Abfrage mehrmals durchführen und strebe die schnellste Lösung an.
sql
postgresql
sql-limit
Joey Franklin
quelle
quelle
explain analyze
?Antworten:
Hierfür können Sie limit verwenden
Wenn Leistung wichtig ist (wann nicht ;-), suchen Sie nach einem Index für die Punktzahl.
Ab Version 8.4 können Sie auch den Standard verwenden ( SQL: 2008 )
fetch first
Wie @Raphvanns betonte, wird dies Ihnen
first 10 rows
buchstäblich das geben. Um doppelte Werte zu entfernen, müssen Siedistinct
Zeilen auswählen , zSQL Fiddle
quelle
fetch first X rows only
ist die Antwort, nach der ich gesucht habe - danke aus der fernen Zukunft!Scheint, als würden Sie
ORDER BY
inDESC
der Endreihenfolge mit der LIMIT- Klausel suchen :Dies kann natürlich
SELECT *
die Leistung ernsthaft beeinträchtigen. Verwenden Sie es daher mit Vorsicht.quelle
Beachten Sie, dass Sie bei Verknüpfungen mit den Top-10-Werten nur die Top-10-Zeilen erhalten, nicht die Top-10- Werte mit den angegebenen Antworten. Beispiel: Wenn die Top 5-Werte 10, 11, 12, 13, 14, 15 sind, Ihre Daten jedoch 10, 10, 11, 12, 13, 14, 15 enthalten, erhalten Sie nur 10, 10, 11, 12, 13, 14 als Ihre Top 5 mit a
LIMIT
Hier ist eine Lösung, die mehr als 10 Zeilen zurückgibt, wenn es Bindungen gibt, aber Sie erhalten alle Zeilen, in denen
some_value_column
sich technisch gesehen die Top 10 befinden.quelle
quelle