PostgreSQL vous permet d'obtenir un numéro de ligne spécifique pour vos données à des fins de classement, de création de rapports et d'analyse de données. Voici comment obtenir le numéro de ligne dans PostgreSQL. Vous pouvez l'utiliser pour une analyse plus approfondie basée sur l'ID de ligne dans PostgreSQL.
Comment obtenir le numéro de ligne dans PostgreSQL
Voici comment obtenir un numéro de ligne spécifique dans PostgreSQL. Nous verrons comment obtenir le numéro de ligne en utilisant la fonction de fenêtre ROW_NUMBER() disponible dans PostgreSQL 8.4+ ainsi qu'en utilisant du SQL brut pour PostgreSQL <8.4.
Disons que vous avez le tableau suivant sales(order_date,sale)
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Lecture bonus :comment calculer le centile dans PostgreSQL
Comment obtenir le numéro de ligne dans PostgreSQL à l'aide de ROW_NUMBER()
Depuis PostgreSQL 8.4, vous pouvez facilement afficher le numéro de ligne dans PostgreSQL en utilisant la fonction ROW_NUMBER(). Voici la requête SQL pour obtenir l'ID de ligne dans PostgreSQL.
postgres=# select row_number() over(), * from sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-01 | 210 2 | 2020-04-02 | 125 3 | 2020-04-03 | 150 4 | 2020-04-04 | 230 5 | 2020-04-05 | 200 6 | 2020-04-10 | 220 7 | 2020-04-06 | 25 8 | 2020-04-07 | 215 9 | 2020-04-08 | 300 10 | 2020-04-09 | 250
Dans la requête SQL ci-dessus, nous utilisons la fonction de fenêtre row_number() pour générer le numéro de ligne pour chaque ligne. Nous utilisons également over() pour dire à PostgreSQL d'afficher le numéro de ligne pour toutes les lignes sans aucun ordre.
Lecture bonus :Comment calculer la médiane dans PostgreSQL
Si vous souhaitez ordonner les lignes avant de générer les numéros de ligne, vous pouvez ajouter une clause ORDER BY dans OVER(), comme indiqué ci-dessous
postgres=# select row_number() over(order by sale), * from sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-06 | 25 2 | 2020-04-02 | 125 3 | 2020-04-03 | 150 4 | 2020-04-05 | 200 5 | 2020-04-01 | 210 6 | 2020-04-07 | 215 7 | 2020-04-10 | 220 8 | 2020-04-04 | 230 9 | 2020-04-09 | 250 10 | 2020-04-08 | 300
Vous ne pouvez pas utiliser la clause WHERE dans les fonctions de fenêtre ROW_NUMBER ou OVER(). Donc, si vous souhaitez filtrer les données avant de générer des numéros de ligne, vous devez utiliser WHERE cause dans une sous-requête, comme indiqué ci-dessous
postgres=# select row_number() over(order by sale), * from ( select * from sales where sale>100) filtered_sales; row_number | order_date | sale ------------+------------+------ 1 | 2020-04-02 | 125 2 | 2020-04-03 | 150 3 | 2020-04-05 | 200 4 | 2020-04-01 | 210 5 | 2020-04-07 | 215 6 | 2020-04-10 | 220 7 | 2020-04-04 | 230 8 | 2020-04-09 | 250 9 | 2020-04-08 | 300
Vous pouvez également obtenir le numéro de ligne dans PostgreSQL en utilisant generate_series. Cependant, il est conseillé de ne pas générer d'identifiant de ligne à l'aide de generate_series puisqu'il n'est pas évolutif.
Lecture bonus :comment remplir les dates manquantes dans PostgreSQL à l'aide de generate_series
Comment obtenir le numéro de ligne dans PostgreSQL (<8.4) sans ROW_NUMBER()
Si vous utilisez PostgreSQL <8.4, alors row_number() la fonction de fenêtre peut ne pas y être disponible. Dans ce cas, vous devez obtenir le numéro de ligne dans PostgreSQL à l'aide d'une auto-jointure. Voici la requête correspondante.
postgres=# SELECT count(*) rownum, foo.* FROM sales foo JOIN sales bar ON (foo.order_date <= bar.order_date) GROUP BY foo.order_date, foo.sale ORDER BY rownum ; rownum | order_date | sale --------+------------+------ 1 | 2020-04-10 | 220 2 | 2020-04-09 | 250 3 | 2020-04-08 | 300 4 | 2020-04-07 | 215 5 | 2020-04-06 | 25 6 | 2020-04-05 | 200 7 | 2020-04-04 | 230 8 | 2020-04-03 | 150 9 | 2020-04-02 | 125 10 | 2020-04-01 | 210
Après avoir obtenu le numéro de ligne dans PostgreSQL, vous pouvez utiliser un outil de rapport PostgreSQL pour rapporter vos données dans un tableau comme indiqué ci-dessous, et les partager avec votre équipe.
Si vous souhaitez créer des graphiques, des tableaux de bord et des rapports à partir de la base de données PostgreSQL, vous pouvez essayer Ubiq. Nous offrons un essai gratuit de 14 jours.