Hallo zusammen,
habe habe eine SQL-Query-Verständnisfrage. Ich muss einen Query aufstellen, der mir z.B. die schnellsten 3 Personen aus einer Tabelle ‘rundenzeiten’ ausgibt.
Also eine TOP (k) - Abfrage. Ich darf leider keine Geschichten wie “LIMIT” oder “TOP” etc verwenden.
Annahme Tabelle:
‘roundtime’ => ‘firstname’, ‘lastname’, ‘speed’;
varchar, varchar, time;
Ich gehe davon aus, dass firstname und lastname zusammen den Primärschlüssel bilden.
Eine funktionierender Query wäre:
select * from roundtime r1 where 3 >=
(select count(*) from roundtime r2 where r1.speed >= r2.speed)
order by r1.speed
Herausbekommen habe ich das durch herumspielen mit den Parameters. Literatur habe ich dazu auch gelesen, verstehe jedoch einige, wichtigen Detail nicht:
- Innerer SELECT: Warum muss ich hier r1.speed >= r2.speed machen, damit er mir die “schnellsten” rauswirft?
Wörtlich hieße das doch "bei dem die äußere Geschwindigkeit (r1.speed) langsamer-gleich (>=) als die innere Geschwindigkeit (r2.speed) - Äußerer SELECT: Hier muss ich “where 3 >=” schreiben, um die schnellsten 3 zu bekommen. Ich verstehe den Sinn bzgl. 3 >= nicht. Ich dachte, hier geht es quasi um das COUNT(*) aus der inneren Anweisung.
Wäre euch sehr dankbar, wenn mir das jemand erklären könnte.
Vielen Dank!!
Felix