PostgreSQL giver dig mulighed for at få specifikt rækkenummer for dine data til rangering, rapportering og dataanalyse. Sådan får du rækkenummer i PostgreSQL. Du kan bruge det til yderligere analyse baseret på række-id i PostgreSQL.
Sådan får du rækkenummer i PostgreSQL
Sådan får du et specifikt rækkenummer i PostgreSQL. Vi vil se på, hvordan man får rækkenummer ved hjælp af ROW_NUMBER() vinduesfunktion, der er tilgængelig i PostgreSQL 8.4+ samt brug af almindelig SQL til PostgreSQL <8.4.
Lad os sige, at du har følgende tabel salg(ordre_dato,udsalg)
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:Sådan beregnes procent i PostgreSQL
Sådan får du rækkenummer i PostgreSQL ved hjælp af ROW_NUMBER()
Siden PostgreSQL 8.4 kan du nemt vise rækkenummer i PostgreSQL ved hjælp af ROW_NUMBER() funktion. Her er SQL-forespørgslen for at få række-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 ovenstående SQL-forespørgsel bruger vi row_number() vinduesfunktion til at generere rækkenummer for hver række. Vi bruger også over() til at fortælle PostgreSQL at vise rækkenummer for alle rækker uden nogen bestilling.
Bonus Læs:Sådan beregnes median i PostgreSQL
Hvis du vil bestille rækker, før du genererer rækkenumre, kan du tilføje en ORDER BY-klausul i OVER(), som vist nedenfor
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 ikke bruge WHERE-sætning i ROW_NUMBER eller OVER() vinduesfunktioner. Så hvis du vil filtrere data, før du genererer rækkenumre, skal du bruge WHERE-årsagen i en underforespørgsel, som vist nedenfor
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 også få rækkenummer i PostgreSQL ved at bruge gener_series. Det er dog tilrådeligt ikke at generere række-id ved hjælp af generate_series da den ikke er skalerbar.
Bonuslæser:Sådan udfyldes manglende datoer i PostgreSQL ved hjælp af generate_series
Sådan får du rækkenummer i PostgreSQL (<8.4) uden ROW_NUMBER()
Hvis du bruger PostgreSQL <8.4, så row_number() vinduesfunktionen er muligvis ikke tilgængelig i den. I så fald skal du få rækkenummer i PostgreSQL ved hjælp af en selv-join. Her er forespørgslen til 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ået rækkenummer i PostgreSQL, kan du bruge et PostgreSQL-rapporteringsværktøj til at rapportere dine data i en tabel som vist nedenfor og dele med dit team.
Hvis du vil oprette diagrammer, dashboards og rapporter fra PostgreSQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.