Met PostgreSQL kunt u een specifiek rijnummer voor uw gegevens krijgen voor rangschikking, rapportage en gegevensanalyse. Hier leest u hoe u het rijnummer in PostgreSQL kunt krijgen. U kunt het gebruiken voor verdere analyse op basis van rij-ID in PostgreSQL.
Hoe u een rijnummer in PostgreSQL kunt krijgen
Hier leest u hoe u een specifiek rijnummer in PostgreSQL kunt krijgen. We zullen bekijken hoe u rijnummers kunt krijgen met behulp van de ROW_NUMBER() vensterfunctie die beschikbaar is in PostgreSQL 8.4+ en hoe u gewone SQL gebruikt voor PostgreSQL <8.4.
Stel dat u de volgende tabel sales(order_date,sale) . heeft
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 lezen:Percentiel berekenen in PostgreSQL
Rijnummer in PostgreSQL ophalen met ROW_NUMBER()
Sinds PostgreSQL 8.4 kunt u eenvoudig het rijnummer in PostgreSQL weergeven met de functie ROW_NUMBER(). Hier is de SQL-query om de rij-ID in PostgreSQL te krijgen.
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 de bovenstaande SQL-query gebruiken we de vensterfunctie row_number() om het rijnummer voor elke rij te genereren. We gebruiken ook over() om PostgreSQL te vertellen dat het rijnummer voor alle rijen moet worden weergegeven zonder enige volgorde.
Bonus lezen:hoe de mediaan te berekenen in PostgreSQL
Als u rijen wilt ordenen voordat u rijnummers genereert, kunt u een ORDER BY-component toevoegen in OVER(), zoals hieronder weergegeven
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
U kunt de WHERE-component niet gebruiken in ROW_NUMBER- of OVER()-vensterfuncties. Dus als u gegevens wilt filteren voordat u rijnummers genereert, moet u WHERE cause in een subquery gebruiken, zoals hieronder weergegeven
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
U kunt ook het rijnummer in PostgreSQL krijgen met behulp van generation_series. Het is echter raadzaam om geen rij-ID te genereren met generate_series omdat het niet schaalbaar is.
Bonus lezen:ontbrekende datums in PostgreSQL invullen met behulp van generation_series
Hoe krijg je rijnummer in PostgreSQL (<8.4) zonder ROW_NUMBER()
Als u PostgreSQL <8.4 gebruikt, dan row_number() vensterfunctie is mogelijk niet beschikbaar. In dat geval moet je het rijnummer in PostgreSQL krijgen met behulp van een self-join. Hier is de vraag ernaar.
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
Nadat u het rijnummer in PostgreSQL heeft gekregen, kunt u een PostgreSQL-rapportagetool gebruiken om uw gegevens in een tabel te rapporteren, zoals hieronder weergegeven, en deze met uw team te delen.
Als u grafieken, dashboards en rapporten wilt maken vanuit de PostgreSQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen aan.