A verseny aktuális állása T-SQL-ben

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:

Versenyzők tábla

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.

Megjegyzés Hozzáfűzése