sql >> Database >  >> RDS >> PostgreSQL

Hoe u een rijnummer kunt krijgen in PostgreSQL

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.

  1. Hoe implementeer je een veel-op-veel-relatie in PostgreSQL?

  2. Hoe schakel ik php in om met postgresql te werken?

  3. java - array doorgeven in oracle opgeslagen procedure

  4. Een databasemodel voor een online-enquête. Deel 3