Rang de Postgres

Rang De Postgres



A PostgreSQL, la funció rank() és una funció de finestra que ens permet assignar un rang a cada fila dins d'un conjunt de resultats en funció d'un criteri d'ordenació determinat. Com la majoria de les funcions de finestra, la funció de classificació és beneficiosa en consultes analítiques, com ara determinar el rang d'una fila en relació amb altres en un conjunt de resultats determinat.

Aquest tutorial explora com treballar amb les funcions de PostgreSQL. També explorem la sintaxi de la funció i els paràmetres i observem alguns exemples pràctics.

Funció PostgreSQL Rank().

A continuació es mostra la sintaxi de la funció rank() a PostgreSQL:







RANK() OVER (PARTICIÓ PER expressió_partició ORDER PER expressió_ordenar [ASC|DESC])

Comencem cridant a la funció rank(). A continuació, utilitzem la paraula clau OVER per indicar que volem realitzar una operació de funció de finestra.



El següent és el PARTITION BY partition_expression. Aquesta clàusula divideix les files en diverses particions basades en una expressió determinada. La classificació es fa de manera independent a cada partició on el valor sencer de classificació comença a 1 per a cada partició nova.



Finalment, tenim la clàusula ORDER BY que especifica la columna o expressió que determina l'ordre de les files.





Exemple de funció PostgreSQL Rank().

La consulta següent mostra un exemple bàsic d'ús de la funció rank() de PostgreSQL:

SELECCIONA el valor, RANK() OVER (ORDENA PER valor) COM a rang
DE (
VALORS (10), (20), (5), (15), (10)
) Dades AS (valor);

En aquest exemple, classifiquem els valors segons el seu ordre ascendent. Les dues ocurrències del valor s'assignen amb el mateix rang, ja que són similars i apareixen a la mateixa posició dins de l'ordre.



La taula resultant és la següent:

SELECT valor, RANK() OVER (PARTICIÓ PER valor % 2 ORDER BY valor) COM a classificació
DE (
VALORS (10), (20), (5), (15), (10)
) Dades AS (valor);

Exemple de funció PostgreSQL Rank() amb la clàusula Partició per

Considereu l'exemple següent:

SELECT valor, RANK() OVER (PARTICIÓ PER valor % 2 ORDER BY valor) COM a classificació
DE (
VALORS (10), (20), (5), (15), (10)
) Dades AS (valor);

En aquest exemple, hem afegit la clàusula PARTITION BY amb una expressió que verifica si el valor és un nombre parell o senar. Això hauria d'agrupar efectivament els valors en dues particions: una per als nombres parells (on la resta és 0) i l'altra per als nombres senars (on la resta és 1).

El conjunt resultant és el següent:

Exemple de funció PostgreSQL Rank() combinant diverses funcions SQL

També podeu crear consultes més complexes mitjançant la funció rank(). Per exemple, agafeu la base de dades Pagila. Suposem que volem recollir els cinc clients principals en funció dels seus pagaments totals de lloguer i assignar-los rangs.

Podem utilitzar la funció rank() tal com es mostra a la consulta següent:

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) AS classificació
DE (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
DEL client c
JOIN payment p ON c.customer_id = p.customer_id
GROUP BY c.id_client, c.nom_de_nom, c.cognom_de_client
) AS customer_payments
ORDENA PER rang
LÍMIT 10;

En aquest exemple, seleccionem el client_id, first_name, last_name, total_payment i el rang assignat(). A continuació, utilitzem la funció rank() per assignar una classificació a cada client en funció del pagament_total que s'ordena en ordre descendent.

La subconsulta interna ens permet calcular els pagaments totals de cada client unint les taules de clients i pagaments. A continuació, agrupem el resultat en funció de les columnes customer_id, first_name i last_name per obtenir la suma dels pagaments per a cada client.

Finalment, a la consulta externa, apliquem la funció rank() sobre el conjunt de resultats i l'ordenem per total_payments en ordre ascendent. També incloem la clàusula de límit per obtenir només les 10 primeres files.

Com podeu veure, podeu generar dades més perspicaces combinant diverses funcions SQL com ara l'ordenació, el filtratge, els agregats, les unions i molt més.

Conclusió

Hem explorat com podem treballar amb la funció rank() a PostgreSQL per obtenir el rang d'una fila determinada d'un conjunt de resultats basat en les condicions definides. També vam explicar com combinar la funció rank() amb altres eines SQL per crear consultes més complexes.