PostgreSQL pozwala uzyskać określony numer wiersza dla danych do rankingu, raportowania i analizy danych. Oto jak uzyskać numer wiersza w PostgreSQL. Możesz go użyć do dalszej analizy na podstawie identyfikatora wiersza w PostgreSQL.
Jak uzyskać numer wiersza w PostgreSQL
Oto jak uzyskać określony numer wiersza w PostgreSQL. Przyjrzymy się, jak uzyskać numer wiersza za pomocą funkcji okna ROW_NUMBER() dostępnej w PostgreSQL 8.4+, a także przy użyciu zwykłego SQL dla PostgreSQL <8.4.
Załóżmy, że masz następującą tabelę sprzedaż(data_zamówienia,sprzedaż)
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
Przeczytaj bonus:Jak obliczyć percentyl w PostgreSQL
Jak uzyskać numer wiersza w PostgreSQL za pomocą ROW_NUMBER()
Od PostgreSQL 8.4 możesz łatwo wyświetlić numer wiersza w PostgreSQL za pomocą funkcji ROW_NUMBER(). Oto zapytanie SQL, aby uzyskać identyfikator wiersza w 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
W powyższym zapytaniu SQL używamy funkcji okna row_number() do generowania numeru wiersza dla każdego wiersza. Używamy również funkcji over(), aby poinformować PostgreSQL, aby wyświetlał numer wiersza dla wszystkich wierszy bez żadnej kolejności.
Przeczytaj bonus:Jak obliczyć medianę w PostgreSQL
Jeśli chcesz uporządkować wiersze przed wygenerowaniem numerów wierszy, możesz dodać klauzulę ORDER BY w funkcji OVER(), jak pokazano poniżej
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
Nie można używać klauzuli WHERE w funkcjach okna ROW_NUMBER lub OVER(). Więc jeśli chcesz filtrować dane przed wygenerowaniem numerów wierszy, musisz użyć WHERE bo w podzapytaniu, jak pokazano poniżej
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
Możesz również uzyskać numer wiersza w PostgreSQL, używając generate_series. Odradza się jednak generowanie identyfikatora wiersza za pomocą generate_series ponieważ nie jest skalowalny.
Przeczytaj bonus:Jak wypełnić brakujące daty w PostgreSQL za pomocą generate_series
Jak uzyskać numer wiersza w PostgreSQL (<8.4) bez ROW_NUMBER()
Jeśli używasz PostgreSQL <8.4, to row_number() funkcja okna może być w nim niedostępna. W takim przypadku musisz uzyskać numer wiersza w PostgreSQL za pomocą funkcji self-join. Oto zapytanie o 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
Po otrzymaniu numeru wiersza w PostgreSQL możesz użyć narzędzia do raportowania PostgreSQL, aby zgłosić swoje dane w tabeli, jak pokazano poniżej, i udostępnić je swojemu zespołowi.

Jeśli chcesz tworzyć wykresy, dashboardy i raporty z bazy danych PostgreSQL, możesz wypróbować Ubiq. Oferujemy 14-dniowy bezpłatny okres próbny.