PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come ottenere il numero di riga in PostgreSQL

PostgreSQL ti consente di ottenere un numero di riga specifico per i tuoi dati per classifica, reportistica e analisi dei dati. Ecco come ottenere il numero di riga in PostgreSQL. Puoi usarlo per ulteriori analisi in base all'ID riga in PostgreSQL.

Come ottenere il numero di riga in PostgreSQL

Ecco come ottenere un numero di riga specifico in PostgreSQL. Vedremo come ottenere il numero di riga utilizzando la funzione della finestra ROW_NUMBER() disponibile in PostgreSQL 8.4+, nonché utilizzando SQL semplice per PostgreSQL <8.4.

Supponiamo che tu abbia la seguente tabella 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

Bonus Leggi:Come calcolare il percentile in PostgreSQL

Come ottenere il numero di riga in PostgreSQL utilizzando ROW_NUMBER()

Da PostgreSQL 8.4, puoi facilmente mostrare il numero di riga in PostgreSQL usando la funzione ROW_NUMBER(). Ecco la query SQL per ottenere l'ID riga in 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

Nella query SQL sopra, utilizziamo la funzione della finestra row_number() per generare il numero di riga per ogni riga. Usiamo anche over() per dire a PostgreSQL di visualizzare il numero di riga per tutte le righe senza alcun ordinamento.

Bonus Leggi:Come calcolare la mediana in PostgreSQL

Se desideri ordinare le righe prima di generare numeri di riga, puoi aggiungere una clausola ORDER BY in OVER(), come mostrato di seguito

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

Non è possibile utilizzare la clausola WHERE nelle funzioni della finestra ROW_NUMBER o OVER(). Quindi, se desideri filtrare i dati prima di generare numeri di riga, devi utilizzare la causa WHERE in una sottoquery, come mostrato di seguito

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

Puoi anche ottenere il numero di riga in PostgreSQL usando generate_series. Tuttavia, è consigliabile non generare ID riga utilizzando generate_series poiché non è scalabile.

Bonus Lettura:come riempire le date mancanti in PostgreSQL usando generate_series

Come ottenere il numero di riga in PostgreSQL (<8.4) senza ROW_NUMBER()

Se usi PostgreSQL <8.4, allora numero_riga() la funzione finestra potrebbe non essere disponibile al suo interno. In tal caso, devi ottenere il numero di riga in PostgreSQL con l'aiuto di un self-join. Ecco la domanda.

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

Dopo aver ottenuto il numero di riga in PostgreSQL, puoi utilizzare uno strumento di reportistica PostgreSQL per riportare i tuoi dati in una tabella come mostrato di seguito e condividerli con il tuo team.

Se vuoi creare grafici, dashboard e report dal database PostgreSQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.