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