Home Tutorial Database (RDBMS) Mengelompokan Data
Tutorial Master Komputer
Mengelompokan Data PDF Cetak E-mail
Ditulis oleh Muhammad Idris   
Jumat, 24 April 2009 16:33

Pada modul ini, Anda akan memperlajari bagaimana mengelompokan data sehingga Anda dapat meringkas sub-kumpulan isi tabel. Ada dua klausa dari statement SELECT yang tercakup disini, yaitu GROUP BY dan HAVING.

7.1    Membuat Kelompok

Kelompok dibuat dengan menggunakan klausa GROUP BY pada statemen SELECT Anda. Perhatikan contoh berikut ini :

INPUT

SELECT KodeSup, COUNT(*) AS Jumlah_Barang

FROM Barang

GROUP BY KodeSup;

OUTPUT

KodeSup     Jumlah_Barang    

-------     -------------    

BRS01       3    

DLL01       4    

ANALYSIS

Statemen SELECT diatas menentukan dua field, KodeSup yang berisi kode supplier barang, dan Jumlah_Barang, yang merupakan field hitungan (dibuat dengan menggunakan fungsi COUNT(*)). Klausa GROUP BY meminta DBMS menyortir data dan mengelompokkannya dengan KodeSup. Dengan demikian, Jumlah_Barang dihitung sekali per KodeSup, daripada sekali untuk tabel keseluruhan. Seperti Anda lihat pada output, supplier BRS01 mempunyai 3 produk terdaftar dan supplier DLL01 mempunyai 4 produk terdaftar.

Karena Anda menggunakan GROUP BY, Anda tidak menentukan setiap kelompok dievaluasi dan dihitung. Hal tersebut dilakukan secara otomatis. Klausa GROUP BY memerintahkan DBMS mengelompokkan data dan kemudian melakukan agregat pada setiap kelompok dari hasil kumpulan keseluruhan.

Sebelum Anda menggunakan GROUP BY, Anda perlu mengetahui beberapa peraturan penting tentang penggunaannya :

·          Klausa GROUP BY dapat berisi banyak field sesuai yang Anda inginkan. Ini memungkinkan Anda mengumpulkan kelompok-kelompok, sehingga Anda mempunyai kontrol yang lebih granular terhadap bagaimana data dikelompokkan.

·          Jika Anda mempunyai kelompok-kelompok yang dikumpulkan pada klausa GROUP BY Anda, maka data diringkas pada kelompok yang ditentukan paling akhir. Dengan kata lain, semua field yang ditentukan dievaluasi bersama-sama ketika pengelompokan dibuat.

·          Setiap field pada GROUP BY harus menjadi field yang didapatkan kembali atau dengan ekspresi valid. Jika sebuah ekspresi dipakai dalam SELECT, maka ekspresi yang sama juga harus ditentukan dalam GROUP BY, Alias tidak dapat digunakan.

·          Kebanyakan implementasi SQL tidak mengijinkan field GROUP BY dengan variabel tipe data panjang (misal teks atau field memo).

·          Selain dari kumpulan statemen kalkulasi agregat, setiap field dalam statemen SELECT Anda harus disajikan dalam klausa GROUP BY.

·          Jika pengelompokan field berisi sebuah baris dengan sebuah nilai NULL, maka NULL akan dikembalikan sebagai sebuah kelompok. Jika ada banyak record dengan nilai-nilai NULL, maka semua baris tersebut akan dikelompokkan bersama-sama.

·          Klausa GROUP BY harus dimulai setelah klausa WHERE dan sebelum klausa ORDER BY.

 

7.2    Menyaring Kelompok

Sebagai tambahan untuk dapat mengelompokkan data dengan menggunakan GROUP BY, SQL juga memperbolehkan Anda menyaring kelompok mana yang dimasukkan dan kelompok mana yang tidak. Sebagai contoh, Anda mungkin menginginkan daftar semua pelanggan yang sedikitnya melakukan dua pesanan. Untuk mendapatkannya, Anda harus menyaring berdasarkan kelompok yang lengkap, tidak pada baris-baris individual.

WHERE tidak bekerja disini, karena WHERE menyaring record khusus, bukan kelompok. Sebenarnya WHERE tidak mempunyai pemikiran mengenai kelompok. Jadi apa yang digunakan sebagai pengganti WHERE ? Untuk tujuan tersebut, SQL menyediakan klausa lainnya, yaitu klausa HAVING. HAVING sangat mirip dengan WHERE. Pada dasarnya, semua tipe klausa WHERE yang telah Anda pelajari sejauh ini dapat juga digunakan dengan HAVING. Perbedaannya hanyalah klausa WHERE menyaring record dan HAVING menyaring kelompok.

HAVING mendukung semua operator WHERE. Semua teknik dan pilih yang Anda pelajari tentang WHERE dapat diterapkan pada HAVING. Syntax-nya sama; hanya keyword yang berubah.

INPUT

SELECT KodeCus, COUNT(*) AS Penjualan

FROM Penjualan

GROUP BY KodeCus

HAVING COUNT(*) >= 2;

OUTPUT

KodeCus     Penjualan  

-------     ---------  

1000000001  2    

ANALYSIS

Tiga baris pertama pada statemen SELECT tersebut sama dengan statemen yang terlihat diatas. Baris terakhir menambahkan sebuah klausa HAVING yang menyaring pada kelompok tersebut dengan COUNT(*) >= 2  à dua atau beberapa pesanan.

Seperti Anda ketahui, klausa WHERE tidak bekerja disini karena penyaringan tersebut berdasarkan nilai agregat kelompok, tidak berdasarkan nilai khusus.

 

7.3    Pengelompokan dan Penyortiran

Anda harus memahami bahwa GROUP BY dan ORDER BY sangat berbeda, sekalipun keduanya sering menyelesaikan hal yang sama. Tabel 7.1 meringkas perbedaan antara keduanya.

Tabel 7.1 ORDER BY vs. GROUP BY

ORDER BY

GROUP BY

Menyortir output yang dihasilkan.

Mengelompokkan record. Tetapi output mungkin tidak dalam urutan kelompok.

Semua field (bahkan field yang tidak dipilih) atau field yang dapat digunakan.

Hanya field atau ekspresi yang dipilih atau yang dapat digunakan, dan setiap ekspresi field yang dipilih harus digunakan.

Tidak pernah diharuskan

Diharuskan jika menggunakan field (atau ekspresi) dengan fungsi agregat.

 

Perbedaan pertama pada Tabel 7.1 sangat penting. Anda akan sering menemukan data yang digabungkan dengan menggunakan GROUP BY akan menjadi output pada urutan kelompok. Tetapi itu tidak selalu, dan sebenarnya tidak diperlukan oleh spesifikasi SQL. Lagipula, sekalipun DBMS Anda selalu menyortir data dengan klausa GROUP BY yang telah ditentukan, Anda dapat menyortir data dengan cara yang berbeda. Hanya karena Anda mengelompokkan data dengan satu cara (untuk memperoleh nilai agregat khusus kelompok. tidak berarti Anda perlu menyortir output dengan cara yang sama. Anda harus selalu menyediakan klausa ORDER BY yang eksplisit, bahkan jika klausa itu identik dengan klausa GROUP BY.

Perhatikan contoh berikut untuk mengetahui penggunaan GROUP BY dan ORDER BY. Statemen SELECT tersebut menampilkan nomor faktur dan jumlah item yang dipesan untuk semua pesanan yang berisi tiga atau lebih.

 INPUT

SELECT NoFaktur, COUNT(*) AS Items

FROM BarangJual

GROUP BY NoFaktur

HAVING COUNT(*) >= 3;

OUTPUT

NoFaktur    Items

--------    -----

20006       3    

20007       5    

20008       5    

20009       3          

 

Untuk menyortir output berdasarkan jumlah item yang dipesan, Anda hanya perlu menambah klausa ORDER BY, seperti berikut ini :

INPUT

SELECT NoFaktur, COUNT(*) AS Items

FROM BarangJual

GROUP BY NoFaktur

HAVING COUNT(*) >= 3

ORDER BY Items, NoFaktur

 

OUTPUT

NoFaktur    Items

--------    -----

20006       3

20009       3

20007       5

20008       5

ANALYSIS

Pada contoh tersebut, klausa GROUP BY digunakan untuk mengelompokkan data berdasarkan nomor faktur (field NoFaktur) sehingga fungsi COUNT(*) dapat menampilkan jumlah item pada setiap pesanan. Klausa HAVING akan menyaring data, sehingga hanya pesanan dengan tiga item atau lebih yang ditampilkan. Akhirnya output disortir dengan menggunakan klausa ORDER BY.

 

7.4    Pengurutan Klausa SELECT

Inilah waktu yang baik untuk meninjau pesanan dimana klausa-klausa dari statemen SELECT ditentukan. Tabel 7.2 mendaftarkan semua klausa yang telah kita pelajari hingga kini, dalam urutan dimana klausa itu harus digunakan.

Tabel 7.2 Klausa SELECT dan Rangkaiannya

Klausa

Deskripsi

Diperlukan

SELECT

Field atau ekspresi yang dihasilkan

Ya

FROM

Tabel untuk mendapatkan data

Hanya jika memilih data dari sebuah tabel

WHERE

Penyaringan tingkat baris

Tidak

GROUP BY

Spesifikasi kelompok

Hanya jika menghitung agregat dengan kelompok

HAVING

Penyaringan tingkat kelompok

Tidak

ORDER BY

Mengurutkan output

Tidak

Comments (0)Add Comment

Write comment

busy