Postgres Rank

Postgres Rank



A PostgreSQL-ben a rank() függvény egy Window függvény, amely lehetővé teszi, hogy egy eredményhalmaz minden sorához egy adott rendezési kritérium alapján rangot rendeljünk. A legtöbb ablakfüggvényhez hasonlóan a rangfüggvény hasznos az analitikai lekérdezésekben, például egy sor rangjának meghatározásában, amely egy adott eredményhalmazban lévő többihez viszonyítva van.

Ez az oktatóanyag a PostgreSQL-függvényekkel való együttműködést mutatja be. Megvizsgáljuk a függvény szintaxisát és paramétereit, valamint néhány gyakorlati példát.

PostgreSQL Rank() függvény

Az alábbiakban látható a rank() függvény szintaxisa a PostgreSQL-ben:







RANK() OVER (PARTÍCIÓ SZERINT partíció_kifejezés ORDER rendezési_kifejezés [ASC|DESC])

Kezdjük a rank() függvény meghívásával. Ezután az OVER kulcsszót használjuk annak jelzésére, hogy ablakfüggvény-műveletet szeretnénk végrehajtani.



A következő a PARTITION BY partíciókifejezés. Ez a záradék egy adott kifejezés alapján különböző partíciókra osztja a sorokat. A rangsorolás külön-külön történik minden partícióban, ahol a rang egész értéke 1-től kezdődik minden új partíciónál.



Végül van az ORDER BY záradék, amely megadja a sorok sorrendjét meghatározó oszlopot vagy kifejezést.





PostgreSQL Rank() függvénypélda

A következő lekérdezés egy alapvető példát mutat be a PostgreSQL rank() függvényének használatára:

SELECT érték, RANK() OVER (ORDER BY érték) AS rang
TÓL TŐL (
ÉRTÉKEK (10), (20), (5), (15), (10)
) AS adat(érték);

Ebben a példában az értékeket növekvő sorrendjük alapján rangsoroljuk. Az érték két előfordulása azonos ranggal van rendelve, mivel hasonlóak, és a sorrendben ugyanazon a helyen jelennek meg.



Az eredményül kapott táblázat a következő:

SELECT érték, RANK() OVER (PARTITION BY érték % 2 ORDER BY érték) AS rang
TÓL TŐL (
ÉRTÉKEK (10), (20), (5), (15), (10)
) AS adat(érték);

PostgreSQL Rank() függvénypélda a Partition By záradékkal

Tekintsük a következő példát:

SELECT érték, RANK() OVER (PARTITION BY érték % 2 ORDER BY érték) AS rang
TÓL TŐL (
ÉRTÉKEK (10), (20), (5), (15), (10)
) AS adat(érték);

Ebben a példában hozzáadtuk a PARTITION BY záradékot egy kifejezéssel, amely ellenőrzi, hogy az érték páros vagy páratlan szám-e. Ennek hatékonyan két részre kell csoportosítania az értékeket: az egyik a páros számokhoz (ahol a maradék 0), a másik pedig a páratlan számokhoz (ahol a maradék 1).

Az így kapott készlet a következő:

PostgreSQL Rank() függvénypélda több SQL szolgáltatás kombinálásával

A rank() függvénnyel összetettebb lekérdezéseket is létrehozhat. Vegyük például a Pagila adatbázist. Tegyük fel, hogy a teljes bérleti díjuk alapján szeretnénk lekérni az öt legnagyobb ügyfelet, és rangsoroljuk őket.

Használhatjuk a rank() függvényt a következő lekérdezés szerint:

SELECT ügyfélazonosító, keresztnév, vezetéknév, összesen_fizetés,
RANK() OVER (ORDER BY total_payments DESC) AS rang
TÓL TŐL (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
vevőtől c
CSATLAKOZÁS a fizetésre p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS customer_payments
RENDEZÉS Rangsor szerint
LIMIT 10;

Ebben a példában kiválasztjuk a customer_id, first_name, last_name, total_payment és a hozzárendelt rank() értéket. Ezután a rank() függvénnyel rangot rendelünk minden vásárlóhoz a total_payment alapján, amely csökkenő sorrendben van rendezve.

A belső részlekérdezés lehetővé teszi, hogy az ügyfél- és fizetési táblázatok összekapcsolásával kiszámítsuk az egyes ügyfelek teljes kifizetését. Ezután csoportosítjuk az eredményt a customer_id, first_name és last_name oszlopok alapján, hogy lekérjük az egyes ügyfelek kifizetéseinek összegét.

Végül a külső lekérdezésben alkalmazzuk a rank() függvényt az eredményhalmazra, és a total_payments szerint rendezzük növekvő sorrendben. A limitzáradékot is belefoglaljuk, hogy csak a felső 10 sort lekérjük.

Amint láthatja, több SQL-szolgáltatás, például rendezés, szűrés, összesítés, összekapcsolás és egyebek kombinálásával áttekinthetőbb adatokat hozhat létre.

Következtetés

Megvizsgáltuk, hogyan dolgozhatunk a rank() függvénnyel a PostgreSQL-ben, hogy a megadott feltételek alapján lekérjük egy adott sor rangját egy eredményhalmazból. Kitértünk arra is, hogyan kombinálhatjuk a rank() függvényt más SQL-eszközökkel összetettebb lekérdezések létrehozásához.