sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat číslo řádku v PostgreSQL

PostgreSQL vám umožňuje získat konkrétní číslo řádku pro vaše data pro hodnocení, vytváření sestav a analýzu dat. Zde je návod, jak získat číslo řádku v PostgreSQL. Můžete jej použít pro další analýzu na základě ID řádku v PostgreSQL.

Jak získat číslo řádku v PostgreSQL

Zde je návod, jak získat konkrétní číslo řádku v PostgreSQL. Podíváme se na to, jak získat číslo řádku pomocí funkce okna ROW_NUMBER() dostupné v PostgreSQL 8.4+ a také pomocí prostého SQL pro PostgreSQL <8.4.

Řekněme, že máte následující tabulku prodej(datum_objednávky,výprodej)

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

Bonusové čtení:Jak vypočítat percentil v PostgreSQL

Jak získat číslo řádku v PostgreSQL pomocí ROW_NUMBER()

Od PostgreSQL 8.4 můžete snadno zobrazit číslo řádku v PostgreSQL pomocí funkce ROW_NUMBER(). Zde je dotaz SQL pro získání ID řádku v 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

Ve výše uvedeném SQL dotazu používáme funkci okna row_number() k vygenerování čísla řádku pro každý řádek. Také používáme over() k tomu, abychom PostgreSQL řekli, aby zobrazoval číslo řádku pro všechny řádky bez jakéhokoli řazení.

Bonusové čtení:Jak vypočítat medián v PostgreSQL

Pokud chcete seřadit řádky před vygenerováním čísel řádků, můžete přidat klauzuli ORDER BY do OVER(), jak je znázorněno níže

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

Klauzuli WHERE nelze použít ve funkcích okna ROW_NUMBER nebo OVER(). Pokud tedy chcete filtrovat data před vygenerováním čísel řádků, musíte v dílčím dotazu použít příčinu WHERE, jak je uvedeno níže

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

Číslo řádku v PostgreSQL můžete také získat pomocí create_series. Je však vhodné negenerovat ID řádku pomocí generate_series protože to není škálovatelné.

Bonusové čtení:Jak vyplnit chybějící data v PostgreSQL pomocí generovat_series

Jak získat číslo řádku v PostgreSQL (<8.4) bez ROW_NUMBER()

Pokud používáte PostgreSQL <8.4, pak row_number() funkce okna v něm nemusí být k dispozici. V takovém případě musíte získat číslo řádku v PostgreSQL pomocí vlastního spojení. Zde je dotaz na to.

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

Poté, co získáte číslo řádku v PostgreSQL, můžete pomocí nástroje pro vytváření sestav PostgreSQL nahlásit svá data v tabulce, jak je uvedeno níže, a sdílet je se svým týmem.

Pokud chcete vytvářet grafy, dashboardy a sestavy z databáze PostgreSQL, můžete zkusit Ubiq. Nabízíme 14denní bezplatnou zkušební verzi.

  1. Vytvořte databázový poštovní profil (SSMS)

  2. Odstranění trasovacích souborů pomocí ADRCI

  3. Tipy pro upgrade Percona XtraDB Cluster na 8.0

  4. 4 tabulkové výstupní režimy v SQLite