Ich habe eine einfache Frage:
Ich habe einepostgresql
Datenbank: Scores(score integer)
.
Wie bekomme ich die höchsten 10 Punkte am schnellsten?
UPDATE:
Ich werde diese Abfrage mehrmals durchführen und strebe nach der schnellsten Lösung.
Hierfür können Sie limit verwenden.
select *
from scores
order by score desc
limit 10
Wenn Leistung wichtig ist (wann ist es nicht ;-), suchen Sie nach einem Index der Punkte.
Ab Version 8.4 können Sie auch den Standard verwenden ( SQL: 2008 ) fetch first
select *
from scores
order by score desc
fetch first 10 rows only
Anscheinend suchen Sie ORDER BY
in DESC
ending Reihenfolge mit LIMIT clause:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Natürlich könnte SELECT *
die Leistung ernsthaft beeinträchtigen, verwenden Sie sie daher mit Vorsicht.
Beachten Sie, dass bei Übereinstimmungen in den Top-10-Werten nur die Top-10-Zeilen angezeigt werden, nicht die Top-10Werte mit den angegebenen Antworten 13, 14, 15, aber Ihre Daten enthalten 10, 10, 11, 12, 13, 14, 15, Sie erhalten 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 Unentschieden gibt. Sie erhalten jedoch alle Zeilen, in denen some_value_column
technisch in den Top 10 ist.
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)