it-swarm.com.de

Wie bekomme ich die Top 10-Werte in Postgresql?

Ich habe eine einfache Frage:

Ich habe einepostgresqlDatenbank: 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.

166
Joey Franklin

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
264
Olaf Dietsche

Anscheinend suchen Sie ORDER BY in DESCending 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.

34

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
0
Raphvanns
(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)
0
kashif