|
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 |
 |