SELECT TOP 2 tt.id
...
ORDER BY tt.punkte DESC)
...
Das Problem bei TOP-Lösungen sind gleiche Punktzahlen. Wenn z.B. der selbe Teilnehmer einmal 100 und dreimal 50 Punkte erreicht hat, bringt TOP 2 alle vier Ergebnisse und die darauf basierende Summe ist dann 250 statt 150.
In diesem Fall ist LIMIT 2 besser, da kommen wirklich nur 2 Datensätze zurück ...
Aber das ist dann halt PostgreSQL.
Und die Liste wäre mit 1 SQL-Statement zu lösen.