sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo obtener el número de fila en PostgreSQL

PostgreSQL le permite obtener un número de fila específico para sus datos para clasificación, informes y análisis de datos. Aquí se explica cómo obtener el número de fila en PostgreSQL. Puede usarlo para un análisis más detallado basado en el Id. de fila en PostgreSQL.

Cómo obtener el número de fila en PostgreSQL

Aquí se explica cómo obtener un número de fila específico en PostgreSQL. Veremos cómo obtener el número de fila usando la función de ventana ROW_NUMBER() disponible en PostgreSQL 8.4+, así como también usando SQL simple para PostgreSQL <8.4.

Supongamos que tiene la siguiente tabla 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

Lectura adicional:Cómo calcular el percentil en PostgreSQL

Cómo obtener el número de fila en PostgreSQL usando ROW_NUMBER()

Desde PostgreSQL 8.4, puede mostrar fácilmente el número de fila en PostgreSQL usando la función ROW_NUMBER(). Aquí está la consulta SQL para obtener la identificación de la fila en 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

En la consulta SQL anterior, usamos la función de ventana row_number() para generar el número de fila para cada fila. También usamos over() para decirle a PostgreSQL que muestre el número de fila para todas las filas sin ningún orden.

Lectura adicional:Cómo calcular la mediana en PostgreSQL

Si desea ordenar filas antes de generar números de fila, puede agregar una cláusula ORDER BY en OVER(), como se muestra a continuación

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

No puede usar la cláusula WHERE en las funciones de ventana ROW_NUMBER o OVER(). Entonces, si desea filtrar datos antes de generar números de fila, debe usar la causa DONDE en una subconsulta, como se muestra a continuación

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

También puede obtener el número de fila en PostgreSQL usando generate_series. Sin embargo, es recomendable no generar una identificación de fila usando generate_series ya que no es escalable.

Lectura adicional:cómo completar las fechas que faltan en PostgreSQL usando generate_series

Cómo obtener el número de fila en PostgreSQL (<8.4) sin ROW_NUMBER()

Si usa PostgreSQL <8.4, entonces row_number() la función de ventana puede no estar disponible en él. En ese caso, debe obtener el número de fila en PostgreSQL con la ayuda de una autocombinación. Aquí está la consulta para ello.

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

Después de obtener el número de fila en PostgreSQL, puede usar una herramienta de informes de PostgreSQL para informar sus datos en una tabla como se muestra a continuación y compartir con su equipo.

Si desea crear gráficos, paneles e informes a partir de la base de datos PostgreSQL, puede probar Ubiq. Ofrecemos una prueba gratuita de 14 días.