Penggunaan Over Partition Pada Sql Oracle



Penggunaan Over Partition Pada Sql Oracle

     Salah satu fitur unik lain yang dimiliki sql di oracle daripada sql biasa adalah keberadaan fungsi over partition. Salah satu syntax yang sering digunakan programmer oracle dalam mengolah query. Over partition merupakan syntax yang berguna untuk melakukan pemilahan atau grouping data berdasarkan string atau kriteria yang dimasukkan. Perintah yang satu ini berperan sama seperti halnya group by. Hanya saja memiliki beberapa perbedaan mendasar dari 'kakak'nya itu.
     Bila group by diletakkan di bagian belakang atau paling bawah dari sript, maka tidak dengan over partition. Over partition malah diletakkan pada syntax yang masih termasuk bagian select, dimana digunakan pada field tertentu yang ingin ditampilkan. Kesamaannya, baik over dan group ini membutuhkan trigger berupa syntax counting group, seperti sum, min, max, dan sebagainya.
Syntax :
     Select sum/min/max/dsb..(nama_kolom) over (partition by nama_kolom_grouping)
contoh :
     Select a.nama_siswa, sum(a.nilai_UAN) over (partition by a.nama_siswa) Total_nilai from data_nilai a
Di atas adalah example dari suatu kasus.
Misalkan dalam tabel ada beberapa nama dan nilai seperti pada kolom. Pada suatu saat, kita ingin menampilkan data berupa nama siswa, yang muncul hanya SATU saja, dan juga jumlah keseluruhan nilai UAN dari siswa bersangkutan.
Contoh tampilan tabel :
Nama_siswa
Mapel
Nilai_UAN
John
MTK
10
Herman
MTK
9
Budi
MTK
8
Anduk
MTK
8
John
Bahasa Indonesia
8
Herman
Bahasa Indonesia
9
Budi
Bahasa Indonesia
7
Anduk
Bahasa Indonesia
7
John
Bahasa Inggris
9
Herman
Bahasa Inggris
8
Budi
Bahasa Inggris
8
Anduk
Bahasa Inggris
10

     Dengan kata lain, kita membutuhkan perintah sum untuk menjumlahkan semua data. Tapi, jika hanya memakai sum saja, maka hasilnya akan ambigu (Itu pun jika tidak memasukkan nama_siswa dalam query). Karena seluruh kolom  nilai UAN pada tabel akan dihitung jadi satu. Oleh karena itu, kita perlu suatu pembeda atau grouping. Dan pada kasus ini kita menggunakan nama siswa.
Dengan memakai over partition - sama seperti group by -, maka result yang akan ditampilkan berupa dua buah kolom, satu nama siswa, kemudian yang kedua adalah kolom berisi jumlah nilai UAN dari siswa tersebut.
Hasil dari query :
Nama_siswa
Total_nilai
John
27
Herman
26
Budi
23
Anduk
25

     Penggunaan over partition, lebih mudah dalam pengaplikasian jika membutuhkan grouping yang banyak. Ditambah lagi, dalam over partition, kita tak perlu menuliskan semua field yang dimasukkan, hanya beberapa saja pun sudah bisa untuk menjalankannya. Bandingkan dengan group by yang harus menuliskan semua nama field yang masuk dalam query select.
Logika :
     select a,b,c,d,e,f, sum(g) over (partition by a,b) from tabel1
     Tidak perlu memasukkan semua dari a sampai f ke dalam (partition by ...). Bisa melakukan grouping secara terpilah, dan tak harus menggunakan semua field yang ditampilkan pada query.
     select a,b,c,d,e,f, sum(g) from tabel1 group by a,b,c,d,e,f
     Mau tidak mau harus memasukkan semua dari a sampai f untuk mentrigger sum dari g. Ada kalanya, terkadang field yang kita tampilkan, tidak diperlukan dalam proses grouping. Bahkan bila dimasukkan malah bisa mengacaukan grouping. Celakanya, padahal field tersebut pun juga harus muncul dalam result sesuai permintaan dari user. Dan jika kita memakai group by, hal ini akan menimbulkan banyak polemik karena hasil yang ditampil tak sesuai harapan. Sum yang seharusnya hanya dikelompokkan oleh 2 kolom, tapi dengan group by, dengan ‘terpaksa’ harus digolongkan dalam semua kolom yang muncul.
     Karena itulah, over partition bisa menjadi salah satu alternatif untuk mengakali keribetan ini. Walau pun, jika memakai over partition, kerepotannya adalah jika kita memakai banyak sum, atau counting group lain. Mau tidak mau , kita juga harus memasangkan over partition di seluruh kolom yang memiliki counting group di dalamnya.
Insya Allah, semoga sedikit informasi ini dapat bermanfaat!

0 Response to "Penggunaan Over Partition Pada Sql Oracle"

Post a Comment