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.