PostgreSQL ви позволява да получите конкретен номер на ред за вашите данни за класиране, отчитане и анализ на данни. Ето как да получите номер на ред в PostgreSQL. Можете да го използвате за по-нататъшен анализ въз основа на идентификатора на ред в PostgreSQL.
Как да получите номер на ред в PostgreSQL
Ето как да получите конкретен номер на ред в PostgreSQL. Ще разгледаме как да получим номер на ред с помощта на функцията на прозореца ROW_NUMBER(), налична в PostgreSQL 8.4+, както и с помощта на обикновен SQL за PostgreSQL <8.4.
Да приемем, че имате следната таблица sales(order_date,sale)
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
Бонус за четене:Как да изчислим процентил в PostgreSQL
Как да получите номер на ред в PostgreSQL с помощта на ROW_NUMBER()
От PostgreSQL 8.4 можете лесно да покажете номера на ред в PostgreSQL с помощта на функцията ROW_NUMBER(). Ето SQL заявката за получаване на идентификатор на ред в 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
В горната SQL заявка използваме прозоречна функция row_number(), за да генерираме номер на ред за всеки ред. Ние също така използваме over(), за да кажем на PostgreSQL да показва номера на редове за всички редове без никаква подредба.
Бонус за четене:Как да изчислим медиана в PostgreSQL
Ако искате да подредите редове, преди да генерирате номера на редове, можете да добавите клауза ORDER BY в OVER(), както е показано по-долу
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
Не можете да използвате клауза WHERE в функциите на прозореца ROW_NUMBER или OVER(). Така че, ако искате да филтрирате данни, преди да генерирате номера на редове, трябва да използвате причина WHERE в подзаявка, както е показано по-долу
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
Можете също да получите номер на ред в PostgreSQL, като използвате generate_series. Въпреки това е препоръчително да не генерирате идентификатор на ред с помощта на generate_series тъй като не е мащабируем.
Бонус за четене:Как да попълните липсващите дати в PostgreSQL с помощта на generate_series
Как да получа номер на ред в PostgreSQL (<8.4) без ROW_NUMBER()
Ако използвате PostgreSQL <8.4, тогава номер_ред() функцията прозорец може да не е налична в него. В този случай трябва да получите номер на ред в PostgreSQL с помощта на самостоятелно присъединяване. Ето заявката за него.
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
След като получите номер на ред в PostgreSQL, можете да използвате PostgreSQL инструмент за отчитане, за да докладвате данните си в таблица, както е показано по-долу, и да ги споделите с екипа си.

Ако искате да създавате диаграми, табла за управление и отчети от базата данни PostgreSQL, можете да опитате Ubiq. Предлагаме 14-дневен безплатен пробен период.