Ma egy gyakran felmerülő kérdést járunk körbe, azaz hogyan lehet kiíratni egy verseny aktuális állását? Vagy kicsit szakmaibb megfogalmazásban, szeretnénk a rekordokat sorrendbe állítani adott szempontnak megfelelően.
Adott a következő adatbázistáblánk:
Amelynek a tartalma a következő:
Feladatunk: Írassuk ki a versenyzők sorrendjét a pontszámuk alapján!
Megoldás: T-SQL –ben ezt nagyon egyszerű kivitelezni, mivel van egy ún. RANK() függvény, amellyel ezt megvalósíthatjuk.
Látható, hogy a Helyezések kiosztásánál a RANK() függvény figyelembe vette a holtversenyt is, így a 4. hely nem került kiosztásra.
Vizsgáljuk meg mit is csináltunk!
RANK() OVER(ORDER BY VersenyzoPontszam DESC AS 'Helyezés',
Az OVER zárójelén belül az ORDER BY VersenyzoPontszam –mal adtuk meg, hogy a pontszámokat vegye figyelembe az helyezéseknél. Mivel a legtöbb pontszámot elérő versenyzőt szeretnénk elsőként kiírni, ezért használtuk a DESC (azaz Descending Order) megjelölést, amely a csökkenő sorrendben írja ki a pontszámokat.
Feladat: Mit kell tennünk, ha olyan listát szeretnénk, amely a jelentkezések sorrendjében írja ki a helyezéseket? Azaz a VersenyzoID alapján rendeznénk a listát, de a helyezéseket az előbbiek szerint osztanánk ki.
Megoldás: Használnunk kell egy külső ORDER BY - t is, amely a lekérdezés eredményére vonatkozik.
Természetesen akár név szerint is rendezhettük volna a listát, a lehetőségek száma végtelen.
Ha szeretnéd kipróbálni az előbbieket, innen letöltheted a lecke sql -es anyagát txt formátumban. További ismereteket a RANK() függvényről itt találsz.