A DENSE_RANK() függvény lehetővé teszi, hogy egy eredményhalmaz minden sorához egyedi rangot rendeljünk egy további megadott oszlop értékei alapján. Nagyon hasonlít a rank() függvényhez, de kis eltérésekkel abban, hogy a függvény hogyan kezeli az ismétlődő rekordokat.
Ebben az oktatóanyagban megvizsgáljuk ennek a függvénynek a működését, a megadott szintaxist és azt, hogyan használhatjuk adatbázisban.
Hogyan működik
Kezdjük azzal, hogy elmagyarázzuk, hogyan működik ez a függvény. Érdemes szem előtt tartani, hogy a függvény magas szintű, és nem tudjuk megmagyarázni a mögöttes megvalósítást.
A függvény úgy működik, hogy az eredményhalmaz minden sorához rangot rendel az 1. rangtól kezdve, és az oszlopok minden egyedi értékéhez 1-gyel nő.
A megadott oszlopokban található hasonló értékű (duplikált) sorok azonos rangot kapnak, a következő, eltérő értékű sor pedig a következő elérhető rangot kapja, hézagok nélkül.
Mint már említettük, a függvény nem hagy hézagot ott, ahol duplikált értékek vannak, ami eltér a rank() függvénytől.
A dense_rank() függvény általános használata a rangsorolási műveletek végrehajtása. Használhatjuk például a legjobb N rekord megkeresésére stb.
Függvény szintaxis:
Az alábbiakban a dense_rank() függvény szintaxisát írjuk le:
DENSE_RANK() OVER ([PARTITION BY partíciókifejezés, ... ]
RENDELÉS rendezési_kifejezés szerint [ASC | DESC], ...
)
Az adott szintaxisban:
- Magával a dense_rank() függvénnyel kezdjük.
- Az OVER záradék jelzi az ablakfunkció specifikációinak kezdetét. Ez határozza meg, hogy a rangsor hogyan kerül alkalmazásra az eredménykészleten belül.
- A PARTITION BY partition_expression egy opcionális záradék, amely lehetővé teszi számunkra, hogy a kapott halmazt egy vagy több oszlop alapján csoportokba vagy partíciókra bontsuk. A rangsorolást a rendszer minden partíción külön alkalmazza, és a rangsor alaphelyzetbe áll egy új partíciónál.
- Az ORDER BY sort_expression megadja, hogy milyen sorrendben kívánjuk rendezni az eredményül kapott partíciókban lévő adatokat.
Minta adat
A dense_rank() függvény használatának bemutatásához kezdjük egy mintaadatokat tartalmazó táblázattal. Esetünkben egy minta „megrendelések” táblázatot használunk az alábbiak szerint:
1. példa: Dense_Rank() függvényhasználat
A dense_rank() függvény segítségével rangsorolhatjuk a kapott megbízásokat az ár alapján. Tekintsük a következő példalekérdezést:
KIVÁLASZTÁSRendelés azonosító,
customer_username,
product_purchased,
DENSE_RANK() OVER (
RENDELÉS ÁLTAL
ár LEMEZ
) price_rank
TÓL TŐL
megrendelések o;
Az adott példában a dense_rank() függvény segítségével rangsoroljuk az adatokat a megbízások ára alapján. Kihagyjuk a PARTITION BY záradékot, mivel nem csoportosítjuk az adatokat.
A kapott kimenet a következő:
2. példa: PARTÍCIÓ
A PARTITION BY záradékot is hozzáadhatjuk az adatok különböző szegmensekbe történő csoportosításához, például a megvásárolt termék alapján.
Egy példalekérdezés a következő:
KIVÁLASZTÁSRendelés azonosító,
customer_username,
product_purchased,
DENSE_RANK() OVER (
partíció a megvásárolt termék szerint
RENDELÉS ÁLTAL
ár LEMEZ
) price_rank
TÓL TŐL
megrendelések o;
Ennek során az eredményül kapott csoportok alapján különböző csoportokba kell csoportosítani az adatokat, és az egyes csoportok elemeire rangsorolni kell.
Következtetés
Ebben a bejegyzésben megtanultuk az SQL dense_rank() ablakfüggvényének használatának és használatának alapjait, hogy rangot rendeljünk az értékekhez bizonyos oszlopok alapján.