PostgreSQL låter dig få specifikt radnummer för dina data för rankning, rapportering och dataanalys. Så här får du radnummer i PostgreSQL. Du kan använda den för ytterligare analys baserat på rad-ID i PostgreSQL.
Hur får man radnummer i PostgreSQL
Så här får du ett specifikt radnummer i PostgreSQL. Vi kommer att titta på hur man får radnummer med ROW_NUMBER() fönsterfunktion tillgänglig i PostgreSQL 8.4+ samt att använda vanlig SQL för PostgreSQL <8.4.
Låt oss säga att du har följande tabell försäljning(orderdatum, rea)
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 Läs:Hur man beräknar procent i PostgreSQL
Hur får du radnummer i PostgreSQL med ROW_NUMBER()
Sedan PostgreSQL 8.4 kan du enkelt visa radnummer i PostgreSQL med ROW_NUMBER() funktion. Här är SQL-frågan för att få rad-id i 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
I ovanstående SQL-fråga använder vi row_number()-fönsterfunktionen för att generera radnummer för varje rad. Vi använder också over() för att tala om för PostgreSQL att visa radnummer för alla rader utan någon ordning.
Bonus Läs:Hur man beräknar median i PostgreSQL
Om du vill beställa rader innan du genererar radnummer kan du lägga till en ORDER BY-sats i OVER(), som visas nedan
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
Du kan inte använda WHERE-satsen i ROW_NUMBER eller OVER() fönsterfunktioner. Så om du vill filtrera data innan du genererar radnummer måste du använda WHERE-orsak i en underfråga, som visas nedan
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
Du kan också få radnummer i PostgreSQL med generera_serier. Det är dock tillrådligt att inte generera rad-id med generate_series eftersom det inte är skalbart.
Bonusläs:Hur man fyller i saknade datum i PostgreSQL med generation_series
Hur får man radnummer i PostgreSQL (<8.4) utan ROW_NUMBER()
Om du använder PostgreSQL <8.4, då row_number() fönsterfunktionen kanske inte är tillgänglig i den. I så fall måste du få radnummer i PostgreSQL med hjälp av en självanslutning. Här är frågan om det.
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
När du har fått radnummer i PostgreSQL kan du använda ett PostgreSQL-rapporteringsverktyg för att rapportera dina data i en tabell enligt nedan, och dela med ditt team.

Om du vill skapa diagram, instrumentpaneler och rapporter från PostgreSQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.