Ich habe eine einfache Frage:
Ich habe eine postgresql
Tisch: Scores(score integer)
.
Wie bekomme ich am schnellsten die 10 höchsten Punktzahlen?
UPDATE:
Ich werde diese Abfrage mehrmals durchführen und strebe die schnellste Lösung an.
Ich habe eine einfache Frage:
Ich habe eine postgresql
Tisch: Scores(score integer)
.
Wie bekomme ich am schnellsten die 10 höchsten Punktzahlen?
UPDATE:
Ich werde diese Abfrage mehrmals durchführen und strebe die schnellste Lösung an.
Hierfür können Sie verwenden Grenze
select *
from scores
order by score desc
limit 10
Wenn Leistung wichtig ist (wann ist sie es nicht ;-), suchen Sie nach einem Index für die Punktzahl.
Ab Version 8.4 können Sie auch den Standard ( SQL:2008 ) fetch first
select *
from scores
order by score desc
fetch first 10 rows only
Wie @Raphvanns anmerkte, erhalten Sie damit die first 10 rows
buchstäblich. Um doppelte Werte zu entfernen, müssen Sie Folgendes auswählen distinct
Zeilen, z.B.
select distinct *
from scores
order by score desc
fetch first 10 rows only
Sie scheinen zu suchen ORDER BY
in DESC
Bestellung beenden mit LIMIT Klausel:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Natürlich SELECT *
kann die Leistung ernsthaft beeinträchtigen, daher ist sie mit Vorsicht zu verwenden.
Beachten Sie, dass Sie bei Gleichheit der Top-10-Werte nur die Top-10-Zeilen erhalten, nicht die Top-10 Werte mit den gegebenen Antworten. Beispiel: Wenn die 5 wichtigsten Werte 10, 11, 12, 13, 14, 15 sind, Ihre Daten aber folgende Werte enthalten 10, 10, 11, 12, 13, 14, 15 enthalten, erhalten Sie nur 10, 10, 11, 12, 13, 14 als Top 5 mit einer LIMIT
Hier ist eine Lösung, die mehr als 10 Zeilen zurückgibt, wenn es Gleichstände gibt, aber Sie erhalten alle Zeilen, in denen some_value_column
ist technisch gesehen in den Top 10.
select
*
from
(select
*,
rank() over (order by some_value_column desc) as my_rank
from mytable) subquery
where my_rank <= 10
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.