Postgres Rank

Postgres Rank



V PostgreSQL je funkcia rank() funkciou okna, ktorá nám umožňuje priradiť poradie každému riadku v sade výsledkov na základe daných kritérií triedenia. Rovnako ako väčšina funkcií okna, funkcia hodnotenia je užitočná pri analytických dotazoch, ako je určovanie poradia riadka, ktoré je relatívne k ostatným v danej množine výsledkov.

Tento tutoriál skúma, ako pracovať s funkciami PostgreSQL. Preskúmame tiež syntax a parametre funkcie a pozrieme sa na niekoľko praktických príkladov.

Funkcia PostgreSQL Rank().

Nasledujúci text zobrazuje syntax funkcie rank() v PostgreSQL:







RANK() NAD (PARTITION BY partition_expression ORDER BY sort_expression [ASC|DESC])

Začneme volaním funkcie rank(). Potom použijeme kľúčové slovo OVER na označenie, že chceme vykonať operáciu funkcie okna.



Ďalej je oddiel PARTITION BY oddiel_výraz. Táto klauzula rozdeľuje riadky na rôzne oddiely na základe daného výrazu. Poradie sa vykonáva nezávisle v každom oddiele, kde hodnota poradového celého čísla začína na 1 pre každý nový oddiel.



Nakoniec máme klauzulu ORDER BY, ktorá určuje stĺpec alebo výraz, ktorý určuje poradie riadkov.





Príklad funkcie PostgreSQL Rank().

Nasledujúci dotaz demonštruje základný príklad použitia funkcie rank() PostgreSQL:

SELECT hodnotu, RANK() OVER (ORDER BY value) AS hodnosť
OD (
VALUES (10), (20), (5), (15), (10)
) AS dáta (hodnota);

V tomto príklade zoradíme hodnoty na základe ich vzostupného poradia. Tieto dva výskyty hodnoty majú priradené rovnaké poradie, pretože sú podobné a objavujú sa na rovnakej pozícii v rámci objednávky.



Výsledná tabuľka je nasledovná:

VYBERTE hodnotu, RANK() NAD (PARTITION BY value % 2 ORDER BY value) AS rank
OD (
VALUES (10), (20), (5), (15), (10)
) AS dáta (hodnota);

Príklad funkcie PostgreSQL Rank() s klauzulou Partition By

Zvážte nasledujúci príklad:

VYBERTE hodnotu, RANK() NAD (PARTITION BY value % 2 ORDER BY value) AS rank
OD (
VALUES (10), (20), (5), (15), (10)
) AS dáta (hodnota);

V tomto príklade sme pridali klauzulu PARTITION BY s výrazom, ktorý kontroluje, či je hodnota párne alebo nepárne číslo. To by malo efektívne zoskupiť hodnoty do dvoch oblastí: jeden pre párne čísla (kde zvyšok je 0) a druhý pre nepárne čísla (kde zvyšok je 1).

Výsledná sada je nasledovná:

Príklad funkcie PostgreSQL Rank() kombináciou viacerých funkcií SQL

Pomocou funkcie rank() môžete vytvárať aj zložitejšie dotazy. Vezmime si napríklad databázu Pagila. Predpokladajme, že chceme získať prvých päť zákazníkov na základe ich celkových platieb za prenájom a priradiť im pozície.

Môžeme použiť funkciu rank (), ako je uvedené v nasledujúcom dotaze:

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) AS rank
OD (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
OD zákazníka c
JOIN platba p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS zákaznícke_platby
OBJEDNAŤ PODĽA hodnosti
LIMIT 10;

V tomto príklade vyberieme customer_id, first_name, last_name, total_payment a priradenú hodnosť (). Potom použijeme funkciu rank() na priradenie poradia každému zákazníkovi na základe celkovej_platby, ktorá je zoradená v zostupnom poradí.

Vnútorný poddotaz nám umožňuje vypočítať celkové platby pre každého zákazníka spojením tabuliek zákazníkov a platieb. Výsledok potom zoskupíme na základe stĺpcov customer_id, first_name a last_name, aby sme získali súčet platieb pre každého zákazníka.

Nakoniec vo vonkajšom dotaze aplikujeme funkciu rank() na množinu výsledkov a zoradíme ju podľa total_payments vo vzostupnom poradí. Zahŕňame aj klauzulu o obmedzení na načítanie iba prvých 10 riadkov.

Ako vidíte, môžete generovať prehľadnejšie údaje kombináciou viacerých funkcií SQL, ako je triedenie, filtrovanie, agregácie, spojenia a ďalšie.

Záver

Skúmali sme, ako môžeme pracovať s funkciou rank() v PostgreSQL, aby sme získali poradie daného riadku zo sady výsledkov na základe definovaných podmienok. Tiež sme sa zaoberali tým, ako skombinovať funkciu rank() s inými nástrojmi SQL, aby ste vytvorili zložitejšie dotazy.