PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara Mendapatkan Nomor Baris di PostgreSQL

PostgreSQL memungkinkan Anda mendapatkan nomor baris tertentu untuk data Anda untuk peringkat, pelaporan, dan analisis data. Berikut cara mendapatkan nomor baris di PostgreSQL. Anda dapat menggunakannya untuk analisis lebih lanjut berdasarkan ID baris di PostgreSQL.

Cara Mendapatkan Nomor Baris di PostgreSQL

Berikut cara mendapatkan nomor baris tertentu di PostgreSQL. Kita akan melihat cara mendapatkan nomor baris menggunakan fungsi jendela ROW_NUMBER() yang tersedia di PostgreSQL 8.4+ serta menggunakan SQL biasa untuk PostgreSQL <8.4.

Katakanlah Anda memiliki tabel berikut penjualan(tanggal_pesanan,penjualan)

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

Bonus Baca :Cara Menghitung Persentil di PostgreSQL

Cara Mendapatkan Nomor Baris di PostgreSQL menggunakan ROW_NUMBER()

Sejak PostgreSQL 8.4, Anda dapat dengan mudah menampilkan nomor baris di PostgreSQL menggunakan fungsi ROW_NUMBER(). Berikut query SQL untuk mendapatkan id baris di 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

Dalam kueri SQL di atas, kami menggunakan fungsi jendela row_number() untuk menghasilkan nomor baris untuk setiap baris. Kami juga menggunakan over() untuk memberi tahu PostgreSQL agar menampilkan nomor baris untuk semua baris tanpa urutan apa pun.

Bonus Baca :Cara Menghitung Median di PostgreSQL

Jika Anda ingin mengurutkan baris sebelum membuat nomor baris, Anda dapat menambahkan klausa ORDER BY di OVER(), seperti yang ditunjukkan di bawah ini

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

Anda tidak dapat menggunakan klausa WHERE dalam fungsi jendela ROW_NUMBER atau OVER(). Jadi jika Anda ingin memfilter data sebelum menghasilkan nomor baris, Anda perlu menggunakan WHERE cause dalam subquery, seperti yang ditunjukkan di bawah ini

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

Anda juga bisa mendapatkan nomor baris di PostgreSQL menggunakan generate_series. Namun, disarankan untuk tidak membuat id baris menggunakan generate_series karena tidak terukur.

Bonus Baca :Cara Mengisi Tanggal Hilang di PostgreSQL menggunakan generate_series

Cara mendapatkan nomor baris di PostgreSQL (<8.4) tanpa ROW_NUMBER()

Jika Anda menggunakan PostgreSQL <8.4, maka row_number() fungsi jendela mungkin tidak tersedia di dalamnya. Dalam hal ini, Anda harus mendapatkan nomor baris di PostgreSQL dengan bantuan self-join. Ini dia kuerinya.

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

Setelah Anda mendapatkan nomor baris di PostgreSQL, Anda dapat menggunakan alat pelaporan PostgreSQL untuk melaporkan data Anda dalam tabel seperti yang ditunjukkan di bawah ini, dan berbagi dengan tim Anda.

Jika Anda ingin membuat grafik, dasbor &laporan dari database PostgreSQL, Anda dapat mencoba Ubiq. Kami menawarkan uji coba gratis selama 14 hari.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana timeofday() Bekerja di PostgreSQL

  2. KONSTRAINT UNIK Postgres untuk array

  3. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?

  4. Tabel sementara PostgreSQL

  5. PostgreSQL mengonversi kolom menjadi baris? Mengubah urutan?