logo

RANK funkció az SQL Serverben

Az SQL Server RANK függvénye egyfajta rangsorolási függvény. Ez a funkció rendelje hozzá a számot a kimenet partícióján belüli minden sorhoz . Minden sorhoz egy plusz az előző sor rangot rendeli hozzá. Ha a RANK függvény két azonos értéket talál ugyanazon a partíción belül, akkor ugyanazt a rangszámot rendeli hozzá. Ezenkívül a rangsorban következő szám az előző helyezés plusz a duplikált számok lesznek. Ezért ez a funkció nem mindig egymás utáni sorrendben rendeli hozzá a sorok rangsorát.

A RANK funkció szintén az ablakfunkciók alrésze. A funkció használata során ne feledje a következő pontokat :

  • Mindig az OVER() záradékkal működik.
  • Minden sorhoz rangot rendel az ORDER BY záradék alapján.
  • Minden sorhoz rangot rendel egymás utáni sorrendben.
  • Mindig rangot rendel a sorokhoz, minden új partícióhoz eggyel kezdve.

MEGJEGYZÉS: A Rank ideiglenes értékeket rendel a partíción belüli sorokhoz a lekérdezés végrehajtásakor.

Az SQL Server a következő rangsorolási funkciókat biztosítja :

  • RANG()
  • ROW_NUMBER()
  • DENSE_RANK()
  • TILE()

Tanuljunk meg minden rangfüggvényt részletesen. Először is készítünk egy táblázatot, amely bemutatja ezeket a funkciókat. A következő utasítások egy nevű táblát hoznak létre rang_demo három oszloppal:

 CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) ); 

Ezután az alábbiak szerint beszúrunk néhány sort ebbe a táblázatba:

 INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California'); 

A táblát a SELECT utasítással tudjuk ellenőrizni. Az alábbi kimenetet jeleníti meg:

RANK funkció az SQL Serverben

RANK() függvény

Ez a funkció az eredményhalmaz egyes sorai rangjának meghatározására szolgál. A következő szintaxis egy RANK függvény használatát mutatja be az SQL Serverben:

string formátum java
 SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Ebben a szintaxisban

  • A OVER záradék beállítja az eredmények particionálását és sorrendjét a kapcsolódó ablakfüggvény alkalmazása előtt.
  • A PARTÍCIÓ záradékkal a FROM záradék által termelt kimenetet a partícióra osztja. Ezután a funkció minden partícióra érvényesül, és újrainicializálódik, amikor az osztáshatár keresztezi a partíciókat. Ha nem definiáltuk ezt a záradékot, a függvény az összes sort egyetlen partícióként kezeli.
  • A RENDEZÉS egy kötelező záradék, amely a függvény alkalmazása előtt egy vagy több oszlopnév alapján csökkenő vagy növekvő módon határozza meg a sorok sorrendjét.

Példa

Nézzük meg, hogyan működik a RANK() függvény az SQL Serverben. Az alábbi utasítás a rang függvényt fogja használni az egyes sorok számozásához:

 SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo; 

Mivel nem használtuk a PARTÍCIÓ záradékkal , a függvény a teljes eredményt egyetlen partícióként kezelte. Az utasítás végrehajtása az alábbi kimenetet jeleníti meg:

RANK funkció az SQL Serverben

Ebben a kimenetben láthatjuk, hogy néhány sor ugyanazt a rangot kapja, mert ugyanaz az értékük a város oszlop . És a következő szám a rangsorban a korábbi rangja, plusz néhány ismétlődő szám lesz.

A következő állítás az egy másik példa ahol olyan partíciót fogunk használni, amely az alapján osztja fel a sorokat város oszlopot, és rendeljen rangsort a partíción belül minden sorhoz. A kimenet sorrendje a keresztnév :

 SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo; 

Az alábbi kimenetet jeleníti meg:

linux make parancs
RANK funkció az SQL Serverben

ROW_NUMBER() függvény

Ez a funkció hozzászokott minden sor egyedi sorszámát adja vissza partícióján belül. A sorszámozás eggyel kezdődik, és eggyel nő, amíg el nem éri a partíció sorainak teljes számát. A sor különböző rangjait adja vissza, amelyek hasonló értékekkel különböznek a RANK() függvénytől.

Az alábbi szintaxis egy ROW_NUMBER() függvény használatát mutatja be az SQL Serverben:

 SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Példa

Hajtsa végre a következő lekérdezést, hogy sorszámot rendeljen az egyes sorokhoz:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Ez hozzárendeli a táblázat rangsorát a sajátjuk szerint város . Itt láthatjuk, hogy különböző rangokat rendel az azonos városértékekkel rendelkező sorhoz.

RANK funkció az SQL Serverben

Ha megváltoztatjuk a rendezési sorrendet a emelkedőtől csökkenőig az ORDER BY záradékkal ez a funkció a RANK-ot is ennek megfelelően módosítja. Lásd az alábbi nyilatkozatot:

 SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo; 

Íme az eredmény:

RANK funkció az SQL Serverben

DENSE_RANK() függvény

Ez a funkció hozzárendeli egy egyedi rangot a partíción belül minden sorhoz a megadott oszlopérték szerint, hézagok nélkül. Mindig egymás utáni sorrendben adja meg a rangsort. Ha kapunk a duplikált érték , ez a funkció ugyanazzal a ranggal rendeli hozzá, és a következő rang a következő sorszám lesz. Ez a jellemző eltér a DENSE_RANK() függvénytől a RANK() függvénytől.

Az alábbi szintaxis egy DENSE_RANK() függvény használatát mutatja be az SQL Serverben:

 SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name; 

Példa

A következő lekérdezés a DENSE_RANK() függvényt használja, hogy minden sorhoz rangszámot rendeljen:

 SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo; 

Az alábbi kimenetet adja vissza, ahol láthatjuk, hogy a duplikált értékek azonos rangúak, és a következő rang lesz a következő sorszám.

RANK funkció az SQL Serverben

Ez egy másik példa a DENSE_RANK() függvényre a PARTITION BY záradék használatával. Ez a záradék a város oszlop alapján osztja fel a sorokat, és az eredménykészlet sorrendje a first_name függvényen alapul:

Java hivatkozási típusok
 SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo; 

Az alábbi kimenetet kapjuk, mert nincs két egyforma név. Ebben az esetben a kimenet hasonló a RANK() függvényhez.

RANK funkció az SQL Serverben

Frissítsük a nevet a következő lekérdezéssel:

 Update rank_demo set first_name = 'Diego' WHERE city = 'California' 

Most hajtsa végre újra ugyanazt a lekérdezést. Látni fogjuk, hogy ez a táblázat ugyanazt a nevet kapta California City . Ezért a rang is azonos mindkét névnél.

RANK funkció az SQL Serverben

TILE(N) funkció

Ez a funkció hozzászokott elosztja egy rendezett partíció sorait egy előre meghatározott számba (N) megközelítőleg egyenlő csoportok. Minden sorcsoport megkapja a rangját a meghatározott feltétel alapján, és egy csoporttól kezdi a számozást. Kijelöli a vödör száma egy csoport minden sorára, amely azt a csoportot képviseli, amelyhez tartozik.

A következő szintaxis az NTILE() függvény használatát mutatja be az SQL Serverben:

 SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name; 

Példa

A következő lekérdezés az NTILE() függvényt használja, hogy minden sorhoz rangszámot rendeljen:

 SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo; 

A megadott táblázat rendelkezik nyolc lemez . Ezért a TILE (3) azt mondja, hogy az eredményhalmaznak rendelkeznie kell a három lemezből álló csoport . Az utasítás végrehajtása az alábbi kimenetet jeleníti meg:

RANK funkció az SQL Serverben

Ez a cikk az SQL Serverben használt összes RANK függvényt ismerteti különféle példákkal. Megmutatja a funkciók közötti főbb különbségeket is. Ezek a funkciók nagyon hasznosak a fejlesztők számára az adatok megfelelő feltárásához és kezeléséhez.