PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać numer wiersza w PostgreSQL

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.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak odpytywać tablice jsonb za pomocą operatora IN

  2. Niesławny wyjątek java.sql.SQLException:nie znaleziono odpowiedniego sterownika

  3. Czy istnieje spadek wydajności przy użyciu dziesiętnych typów danych (MySQL / Postgres)

  4. Wybieranie danych do tablicy Postgres

  5. lastInsertId nie działa w Postgresql