PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So erhalten Sie die Zeilennummer in PostgreSQL

PostgreSQL ermöglicht es Ihnen, eine bestimmte Zeilennummer für Ihre Daten für Rankings, Berichte und Datenanalysen zu erhalten. So erhalten Sie die Zeilennummer in PostgreSQL. Sie können es für weitere Analysen basierend auf der Zeilen-ID in PostgreSQL verwenden.

So erhalten Sie die Zeilennummer in PostgreSQL

So erhalten Sie eine bestimmte Zeilennummer in PostgreSQL. Wir werden uns ansehen, wie man die Zeilennummer mit der Fensterfunktion ROW_NUMBER() erhält, die in PostgreSQL 8.4+ verfügbar ist, sowie die Verwendung von einfachem SQL für PostgreSQL <8.4.

Nehmen wir an, Sie haben die folgende Tabelle 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-Lesetext:So berechnen Sie das Perzentil in PostgreSQL

So erhalten Sie die Zeilennummer in PostgreSQL mit ROW_NUMBER()

Seit PostgreSQL 8.4 können Sie die Zeilennummer in PostgreSQL ganz einfach mit der Funktion ROW_NUMBER() anzeigen. Hier ist die SQL-Abfrage zum Abrufen der Zeilen-ID 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

In der obigen SQL-Abfrage verwenden wir die Fensterfunktion row_number(), um die Zeilennummer für jede Zeile zu generieren. Wir verwenden auch over(), um PostgreSQL anzuweisen, die Zeilennummer für alle Zeilen ohne Sortierung anzuzeigen.

Bonus-Lesetext:So berechnen Sie den Median in PostgreSQL

Wenn Sie Zeilen sortieren möchten, bevor Sie Zeilennummern generieren, können Sie eine ORDER BY-Klausel in OVER() hinzufügen, wie unten gezeigt

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

Sie können die WHERE-Klausel nicht in ROW_NUMBER- oder OVER()-Fensterfunktionen verwenden. Wenn Sie also Daten filtern möchten, bevor Sie Zeilennummern generieren, müssen Sie die WHERE-Ursache in einer Unterabfrage verwenden, wie unten gezeigt

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

Sie können die Zeilennummer auch in PostgreSQL mit generate_series abrufen. Es ist jedoch ratsam, die Zeilen-ID nicht mit generate_series zu generieren da es nicht skalierbar ist.

Bonus-Lesetext:So füllen Sie fehlende Daten in PostgreSQL mithilfe von generate_series

aus

So erhalten Sie die Zeilennummer in PostgreSQL (<8.4) ohne ROW_NUMBER()

Wenn Sie PostgreSQL <8.4 verwenden, dann row_number() Die Fensterfunktion ist darin möglicherweise nicht verfügbar. In diesem Fall müssen Sie die Zeilennummer in PostgreSQL mit Hilfe eines Self-Joins abrufen. Hier ist die Abfrage dafür.

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

Nachdem Sie die Zeilennummer in PostgreSQL erhalten haben, können Sie ein PostgreSQL-Berichtstool verwenden, um Ihre Daten wie unten gezeigt in einer Tabelle zu melden und mit Ihrem Team zu teilen.

Wenn Sie Diagramme, Dashboards und Berichte aus der PostgreSQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.