Skip to main content

PostgreSQL | Membuat Nomor Urut dengan Window Function ROW_NUMBER()

Pengguna Oracle Database mungkin sudah sangat familiar dengan clausa ROWNUM.
Bagi yang belum tahu apa itu ROWNUM, ROWNUM adalah pseudo column (kolom bayangan) yang berisi nomor urut dari hasil eksekusi query.

Sayangnya fitur ini belum tersedia pada PostgreSQL. Namun ada kabar gembira bagi kita pengguna PostgreSQL, dimana sejak versi 8.4, PostgreSQL telah menyediakan 1 window function yang mengakomodasi masalah ROWNUM, yakni ROW_NUMBER().

Sesuai dengan dokumentasi yang disediakan, cara menggunakan fungsi ini adalah dengan menggabungkannya dengan clausa OVER yang didalamnya berisi clausa ORDER BY.
Supaya lebih jelas dan lebih mudah dipahami, lebih baik langsung kita praktekkan saja.

Saya membuat sebuah table dengan struktur sebagai berikut
CREATE TABLE name (
code CHAR(1)
);

yang kemudian saya isi kolom code dengan alfabet mulai dari a s/d z dan angka 0 (nol).
Sebelumnya kita lakukan query ke table name tanpa clausa ORDER BY:
SELECT code FROM name;

Outputnya adalah sebagai berikut:

 code
------
 a
 b
 c
 d
 e
 f
 g
 h
 i
 j
 k
 l
 m
 n
 o
 p
 q
 r
 s
 t
 u
 v
 w
 x
 y
 z
 0
(27 rows)

terlihat bahwa urutan yang digunakan adalah urutan insert. (FYI: PostgreSQL secara default mengurutkan data sesuai dengan aktifitas DML, sehingga data terakhir yang mengalami perubahan akan berada pada urutan terbawah, kecuali kita menggunakan clausa ORDER BY).

Selanjutnya kita buat query berikut:
SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name;

Outputnya adalah sebagai berikut

 nomor_urut | code
------------+------
          1 | 0
          2 | a
          3 | b
          4 | c
          5 | d
          6 | e
          7 | f
          8 | g
          9 | h
         10 | i
         11 | j
         12 | k
         13 | l
         14 | m
         15 | n
         16 | o
         17 | p
         18 | q
         19 | r
         20 | s
         21 | t
         22 | u
         23 | v
         24 | w
         25 | x
         26 | y
         27 | z
(27 rows)

Dapat kita lihat dari output tersebut bahwa kolom code sudah urut sesuai clausa ORDER BY pada OVER, sehingga kita tidak perlu lagi untuk menambahkan clausa ORDER BY setelahnya.

Sekarang bagaimana jika kita menggunakan dua clausa ORDER BY. Langsung saja kita coba dengan 4 kombinasi:
SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name ORDER BY code;
SELECT ROW_NUMBER() OVER (ORDER BY code DESC) AS nomor_urut, code FROM name ORDER BY code DESC;
SELECT ROW_NUMBER() OVER (ORDER BY code DESC) AS nomor_urut, code FROM name ORDER BY code;
SELECT ROW_NUMBER() OVER (ORDER BY code) AS nomor_urut, code FROM name ORDER BY code DESC;

Hasilnya adalah sebagai berikut:
1. Dua query pertama akan menghasilkan nomor_urut yang urut secara ascending, dan urutan kolom code sesuai dengan clausa ORDER BY di belakang.
2. Sedangkan query terakhir akan menghasilkan nomor_urut yang urut secara descending, dan tetap urutan kolom code menyesuaikan dengan clausa ORDER BY di belakang.

Happy querying :)

referensi: www.postgresql.org

Comments

Popular posts from this blog

Java | Menambahkan Dialog Konfirmasi Sebelum Keluar dari Aplikasi

Kali ini saya ingin berbagi cara sederhana untuk menampilkan dialog konfirmasi sebelum keluar dari aplikasi. Dengan syarat aplikasi yang kita buat harus menggunakan JFrame sebagai frame utama. Langkah-langkah yang harus kita lakukan adalah sebagai berikut: 1. Ganti property default close operation dari JFrame menjadi DO_NOTHING_ON_CLOSE, value ini dimaksudkan agar ketika button close dari JFrame diklik tidak akan terjadi apa-apa. Sebaliknya jika valuenya adalah EXIT_ON_CLOSE, maka ketika button close dari JFrame diklik maka program akan tertutup. setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 2. Yang kedua adalah kita harus menambahkan WindowListener pada JFrame. Interface WindowListener memiliki beberapa method terkait event terhadap window (yakni JFrame), namun yang harus kita override hanyalah method windowClosing, method ini akan dipanggil ketika button close diklik.   Sebagai informasi, apabila kita menambahkan WindowListener secara langsung ...

Ubuntu | Perbedaan Perintah adduser dan useradd

Sebagai "senior" dalam perusahaan, saya terkadang merangkap sebagai administrator user pada komputer server (kami menggunakan pc station dengan Ubuntu 7.04 sebagai OS *jadul ya :D*) Untuk menambahkan user baru pada linux, khususnya pada  Ubuntu , sahabat tentunya sudah mengetahui ada dua opsi perintah yang bisa digunakan yakni  adduser dan useradd . Lalu apa sih perbedaan kedua perintah tersebut? Ok, untuk mencari tahu mari kita lakukan ujicoba secara langsung: 1. Jalan perintah useradd  melalui terminal sudo useradd [nama_user] Perintah tersebut tidak menghasilkan output apapun 2. Jalankan perintah adduser sudo adduser [nama_user] Perintah tersebut menghasilkan output dan entrian yang harus kita isi, sebagai berikut Adding user `eko2' ... Adding new group `eko2' (1001) ... Adding new user `eko2' (1001) with group `eko2' ... Creating home directory `/home/eko2' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retyp...