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 rangTÓ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 rangTÓ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 rangTÓ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.