Begrenzte Listendarstellung

Fragen und Probleme rund um die Abfragespache SQL.
simar
Neuer Benutzer
Beiträge: 26
Registriert: Di 9. Okt 2018, 17:40

Begrenzte Listendarstellung

Beitrag von simar » Di 9. Okt 2018, 18:09

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

akretschmer
Erfahrener Benutzer
Beiträge: 7480
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Begrenzte Listendarstellung

Beitrag von akretschmer » Di 9. Okt 2018, 18:20

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?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

castorp
Erfahrener Benutzer
Beiträge: 1060
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Begrenzte Listendarstellung

Beitrag von castorp » Di 9. Okt 2018, 18:20

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()
Zuletzt geändert von castorp am Di 9. Okt 2018, 18:25, insgesamt 1-mal geändert.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

akretschmer
Erfahrener Benutzer
Beiträge: 7480
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Begrenzte Listendarstellung

Beitrag von akretschmer » Di 9. Okt 2018, 18:21

ich schenke Dir ein 'r' für das "ORDER" im over-Teil ;-)
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

castorp
Erfahrener Benutzer
Beiträge: 1060
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Begrenzte Listendarstellung

Beitrag von castorp » Di 9. Okt 2018, 18:25

Danke, eingepackt ;)
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

simar
Neuer Benutzer
Beiträge: 26
Registriert: Di 9. Okt 2018, 17:40

Re: Begrenzte Listendarstellung

Beitrag von simar » Di 9. Okt 2018, 20:08

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)

akretschmer
Erfahrener Benutzer
Beiträge: 7480
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Begrenzte Listendarstellung

Beitrag von akretschmer » Di 9. Okt 2018, 20:11

was genau hast denn versucht?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

simar
Neuer Benutzer
Beiträge: 26
Registriert: Di 9. Okt 2018, 17:40

Re: Begrenzte Listendarstellung

Beitrag von simar » Di 9. Okt 2018, 20:20

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

akretschmer
Erfahrener Benutzer
Beiträge: 7480
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: Begrenzte Listendarstellung

Beitrag von akretschmer » Di 9. Okt 2018, 20:27

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.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

simar
Neuer Benutzer
Beiträge: 26
Registriert: Di 9. Okt 2018, 17:40

Re: Begrenzte Listendarstellung

Beitrag von simar » Di 9. Okt 2018, 20:28

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

Antworten