PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter o número da linha no PostgreSQL


O PostgreSQL permite que você obtenha um número de linha específico para seus dados para classificação, relatórios e análise de dados. Veja como obter o número da linha no PostgreSQL. Você pode usá-lo para análise posterior com base no ID da linha no PostgreSQL.


Como obter o número da linha no PostgreSQL


Veja como obter um número de linha específico no PostgreSQL. Veremos como obter o número da linha usando a função de janela ROW_NUMBER() disponível no PostgreSQL 8.4+, bem como usando SQL simples para PostgreSQL <8.4.

Digamos que você tenha a seguinte tabela vendas(data_pedido,venda)
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



Bônus de leitura:Como calcular o percentil no PostgreSQL


Como obter o número da linha no PostgreSQL usando ROW_NUMBER()


Desde o PostgreSQL 8.4, você pode facilmente mostrar o número da linha no PostgreSQL usando a função ROW_NUMBER(). Aqui está a consulta SQL para obter o ID da linha no 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

Na consulta SQL acima, usamos a função de janela row_number() para gerar o número da linha para cada linha. Também usamos over() para dizer ao PostgreSQL para exibir o número da linha para todas as linhas sem qualquer ordenação.



Bônus de leitura:Como calcular a mediana no PostgreSQL



Se você quiser ordenar as linhas antes de gerar números de linha, você pode adicionar uma cláusula ORDER BY em OVER(), conforme mostrado abaixo
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



Você não pode usar a cláusula WHERE em funções de janela ROW_NUMBER ou OVER(). Portanto, se você deseja filtrar dados antes de gerar números de linha, precisa usar WHERE cause em uma subconsulta, conforme mostrado abaixo
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



Você também pode obter o número da linha no PostgreSQL usando generate_series. No entanto, é aconselhável não gerar id de linha usando generate_series pois não é escalável.



Bônus de leitura:Como preencher datas ausentes no PostgreSQL usando generate_series


Como obter o número da linha no PostgreSQL (<8.4) sem ROW_NUMBER()


Se você usa PostgreSQL <8.4, então row_number() função de janela pode não estar disponível nele. Nesse caso, você deve obter o número da linha no PostgreSQL com a ajuda de um auto-join. Aqui está a consulta para isso.
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



Depois de obter o número da linha no PostgreSQL, você pode usar uma ferramenta de relatório do PostgreSQL para relatar seus dados em uma tabela conforme mostrado abaixo e compartilhar com sua equipe.





Se você deseja criar gráficos, painéis e relatórios do banco de dados PostgreSQL, experimente o Ubiq. Oferecemos um teste gratuito de 14 dias.