SQL-Abfrage Hilfe

dumper

Grünschnabel
Hallo,

ich habe mich hier mal angemeldet weil ich Hilfe brauche bei einer SQL-Abfrage.
Ich gebe jetzt mal ein vereinfachtes Beispiel:

Ich will jetzt eine Abfrage auf eine Tabelle machen, welche mir die Top 5 Sportler gibt, die die meisten Bestzeiten in den jeweiligen Sportarten halten.

Das Ergebnis sollte so aussehen:

# Name (Anzahl Recorde)
1. chris 12
2. jan 7
3. tim 6
4. max 4
5. tobi 2

Tabelle: Zeiten
Felder: Name, Sporttyp, (persönliche Bestzeit)
 
Willkommen,

Datenbank?

Access ungefähr so:
Code:
SELECT TOP 5 MIN(Zeit), Name, Sporttyp 
FROM Zeiten 
GROUP BY Name, Sporttyp 
ORDER BY 1

Postgre ungefähr so:
Code:
SELECT MIN(Zeit), Name, Sporttyp 
FROM Zeiten 
GROUP BY Name, Sporttyp 
ORDER BY 1 
LIMIT 5
 
Zuletzt bearbeitet:
hi,
db: mysql (sry vergessen)

erstmal danke für die Anwort.

Ich habe das vllt etwas verwirrend formuliert.
Die Abfrage gibt mir leider nur die persönliche(!) Bestzeit eines Sportlers in der jeweiligen Sportart aus. Die Zeit ist aber für die Ausgabe irrelevant, sondern nur die Anzahl der Rekorde die dieser hält. D.h. wenn Sportler X schnellster (MIN Zeit) in Sportart1 ist dann hält dieser logischerweise den Rekord für diese Sportart. Jetzt soll diese Auswertung für alle Sportarten erfolgen und dann in einer Top5 ausgegeben werden.


Beispiel:

Tabelle:

sportler | sportart | zeit
----------+----------+------
1 | sport1 | 10
1 | sport2 | 20
1 | sport3 | 30
1 | sport4 | 40
2 | sport1 | 9
2 | sport2 | 21
2 | sport3 | 30
1 | sport1 | 12
2 | sport1 | 11

Ausgabe:

sportler | Rekorde
----------+-------
1 | 3
2 | 2
 
Zuletzt bearbeitet:
ca. so: http://www.sqlfiddle.com/#!2/2e542/4

SQL:
select 
  y.sportler,
  count(*) as rekorde
from
(
select 
  s.sportler
from
  sport s
inner join
(
select 
  sportart,
  min(zeit) as min_zeit
from 
  sport
group by 
  sportart
) x
on
  s.sportart = x.sportart and s.zeit = x.min_zeit
) y
group by 
  y.sportler
order by 
  rekorde desc, y.sportler
;
 
Zurück