PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получите номер на ред в PostgreSQL

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-дневен безплатен пробен период.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инструкции IF-THEN-ELSE в postgresql

  2. IntegrityError дублиращата се стойност на ключа нарушава уникалното ограничение - django/postgres

  3. Изчислете точката на 50 мили (север, 45% NE, 45% SW)

  4. Разделете върнатия от функцията запис на множество колони

  5. Как да репликирате PostgreSQL данни на отдалечени сайтове