Seite 1 von 6

Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 18:09
von simar
Hallo zusammen,

ich bin neu hier im Forum

Meine Frage:
Ich habe eine Tabelle mit Sportergebnissen
Name; Verein; Ergebnis; Disziplin.

Angenommen 100 Namen; 20 Vereine; 400 Ergebnisse; 10 Disziplinen
Ich bräuchte nun eine Liste in der nur die besten fünf Namen pro Verein absteigend nach Einzel- und Vereinsergebnis gelistet werden.

Ich kann leider nur "alle" Namen nach meinen Vorstellungen selectieren, möchte aber wie geschrieben nur die besten fünf pro Verein haben.

vielleicht kann mir hier jemand helfen
vorab besten Dank

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 18:20
von akretschmer
Du kannst erst einmal mit rank() over (partition by verein order by ergebnis desc) eine zusätzliche Spalte im Result erzeugen, und das in einem Subselect verwenden, wo du dann mittels WHERE rank <= 5 die Top 5 je Verein ausfilterst.

Schaffst Du jetzt, oder?

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 18:20
von castorp
Sowas denke ich:

Code: Alles auswählen

select name, verein, ergebnis, disziplin
from (
  select name, verein, ergebnis, disziplin, row_number() over (partition by verein order by ergebnis desc) as rn
  from sportergebnisse
) t
where rn <= 5
order by verein, ergebnis desc;
Die Abfrage geht davon aus, dass ein höheres Ergebnis ein besseres ist.

Wenn Du bei den "die 5 Besten" auch welche mit der gleichen Wertung drin haben willst (es dann aber mehr als 5 werden können), nimm dense_rank() anstatt row_number()

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 18:21
von akretschmer
ich schenke Dir ein 'r' für das "ORDER" im over-Teil ;-)

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 18:25
von castorp
Danke, eingepackt ;)

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 20:08
von simar
Danke für die schnelle Hilfe, aber leider bringe ich den Subselect nicht in die richtige Reihe (fehlender Eintrag in FROM-Klausel für Tabelle Name)

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 20:11
von akretschmer
was genau hast denn versucht?

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 20:20
von simar
hatte die Musterbezeichnungen so gewählt dass ich die Orginal Bezeichnungen nur rein kopieren mußte aber irgend wie klappt das nicht.
hab die Abfrage danach so vereinfacht dass ich nur noch Daten aus zwei Tabellen benötigte aber das hat auch nicht funktioniert.

die blose Abfrage und Sortiering Funktioniert korrekt, auch die row_ number Spalte wird korrekt gebildet.
Nnur sie Selectierung nach der rn bringe ich nicht auf die Reihe

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 20:27
von akretschmer
Du hast also jetzt eine funktionierende Abfrage mit row_number(), ja?


select * from ( hier die funktionierende Abfrage ) ALIAS where row_number <= 5

Ich *vermute* mal, Du hast den Alias vergessen. In der Demo von @castorp ist das schlicht das t nach der schließenden Klammer.

Re: Begrenzte Listendarstellung

Verfasst: Di 9. Okt 2018, 20:28
von simar
select shooters.surname as Name,
shooters.forename as Vorname,
shooters.club as Verein,
journal.results as Ergebnis,
ROW_NUMBER() OVER (partition by shooters.club ORDER BY journal.results desc) as Platz
from home.journal,
home.shooters
where journal.shooters_id = shooters.shooters_id
and journal.event_status = 'finished'
and journal.shooters_id >0
group by name,verein,vorname
order by Verein, Ergebnis desc