Overview
SQL GROUP BY berfungsi penting dalam pengelompokan data, yakni untuk menghasilkan analisis data yang lebih akurat. Artikel ini akan mengulas kegunaan dan berbagai cara menggunakan klausa GROUP BY di SQL.
Klausa GROUP BY di SQL punya peran penting dalam mengelompokkan data sehingga menghasilkan analisis yang lebih akurat. Bagaimana cara menggunakan klausa ini? Artikel ini akan mengulas kegunaan, cara menggunakan, serta contoh penggunaan SQL GROUP BY.
Kegunaan SQL GROUP BY
Pada umumnya, kita banyak menggunakan agregasi untuk menyimpulkan poin-poin penting dari data yang ada. Sebagai contoh, nilai minimum, nilai maksimum, maupun menghitung rata-rata merupakan sebagian dari bentuk agregat yang sering digunakan.
Tetapi dalam beberapa kasus, mengagregat seluruh data yang ada tanpa mempertimbangkan variabel lain seperti kategori dapat menghasilkan kesimpulan yang kurang informatif/kurang akurat. Hal ini dapat terjadi apabila data yang dimiliki cukup beragam.
Sebagai contoh, dalam melakukan analisis terhadap kecepatan berlari rata-rata manusia di mana data diambil dari sekumpulan orang mulai dari kalangan atlet hingga karyawan swasta, laki-laki maupun perempuan, anak-anak maupun berusia lanjut, dan lain sebagainya.
Apabila tidak melakukan pengelompokan terlebih dahulu, hasil analisis yang diperoleh tidak mewakili keadaan sebenarnya. Sehingga, akan lebih baik jika melakukan pengelompokan seperti umur, jenis kelamin, dan lain sebagainya agar hasil agregat/hasil analisis yang diperoleh lebih akurat.
Oleh karena itu, penggunaan GROUP BY dapat membantu menyimpulkan data yang ada lebih informatif dengan cara melakukan pengelompokkan data terlebih dahulu sebelum diolah.
Cara Menggunakan SQL GROUP BY
Umumnya, klausa GROUP BY banyak digunakan beriringan dengan fungsi agregat, tetapi penggunaan klausa GROUP BY juga dapat digunakan dalam kondisi lainnya sebagaimana dikutip dari Towards Data Science:
- Penggunaan klausa GROUP BY tanpa fungsi agregat
- Penggunaan klausa GROUP BY dengan ORDER BY
- Penggunaan klausa GROUP BY dengan HAVING vs WHERE
#1 Penggunaan Klausa GROUP BY dengan Fungsi Agregat
Penggunaan klausa GROUP BY dengan fungsi agregat merupakan kasus yang paling umum digunakan dalam mengolah data. Tujuan dari klausa GROUP BY pada skenario ini untuk mengelompokan data-data yang memiliki kategori/sifat yang serupa dan kemudian melakukan agregasi berdasarkan kategori yang ada.
Pengelompokkan data menggunakan klausa GROUP BY tidak hanya dapat dilakukan untuk 1 kategori saja, melainkan dapat dilakukan juga untuk mengelompokkan data berdasarkan 2 atau lebih kategori.
Pada skenario ini, penulisan klausa GROUP BY ditaruh setelah klausa FROM pada SQL. Untuk mempermudah pemahaman mengenai penulisan GROUP BY pada skenario ini, perhatikan pada gambar di bawah ini.
Berikut merupakan tabel laporan pembuangan sampah yang terdiri dari empat kolom yaitu: tanggal pelaporan, jenis sampah yang akan dibuang, berat sampah, dan nama TPA yang dituju.
- Pengelompokkan data berdasarkan 1 kategori (1 kolom)
Seperti yang sudah dibahas sebelumnya, klausa GROUP BY dapat digunakan untuk melakukan pengelompokan berdasarkan 1 kategori (atau 1 kolom pada tabel). Sebagai contoh, apabila ingin melihat rata-rata berat sampah, beban maksimum, dan beban minimum untuk setiap tanggal pelaporan, dapat diperoleh menggunakan logic sebagai berikut:
Maka hasil yang akan diperoleh adalah:
Dapat dilihat bahwa, hasil rata-rata, minimum, dan maksimum yang diperoleh, sudah dikelompokkan berdasarkan hari pelaporan.
- Pengelompokkan data berdasarkan 2 kategori atau lebih
Tidak hanya itu, klausa GROUP BY juga dapat digunakan untuk pengelompokan berdasarkan 2 atau lebih kategori (atau >=2 kolom pada tabel). Pada contoh kasus berikut, akan dijelaskan penggunaan klausa GROUP BY pada 2 kategori (2 kolom).
Dengan menggunakan dataset yang sama, apabila ingin melakukan analisis lebih detail dengan mencari nilai rata-rata, maksimum, dan minimum dari sampah berdasarkan tanggal pelaporan dan jenis sampah yang ada. Hal ini dapat diperoleh dengan menggunakan logic sebagai berikut:
Dapat dilihat bahwa penulisan GROUP BY dengan 2 kategori serupa dengan 1 kategori, yang membedakannya adalah penulisan kategori setelah klausa GROUP BY yang di mana di antara setiap kategori dipisahkan dengan tanda ‘koma’ .
Hasil yang akan diperoleh melalui logic pada gambar di atas adalah:
#2 Penggunaan Klausa GROUP BY Tanpa Fungsi Agregat
Walaupun klausa GROUP BY banyak digunakan bersamaan dengan fungsi agregat, tetapi klausa GROUP BY dapat digunakan juga tanpa adanya fungsi agregat. Tentunya dalam mengelolah sebuah data terdapat kondisi di mana data yang ada tidak unik melainkan terdapat data yang sama tetapi analisis yang diinginkan hanya berdasarkan data yang unik.
Pada skenario ini, klausa GROUP BY digunakan untuk menghilangkan data duplikat dari sebuah dataset. Dalam penulisan SQL, penempatan klausa GROUP BY juga ditaruh setelah klausa FROM.
Berikut merupakan contoh penggunaan klausa GROUP BY tanpa fungsi agregat dengan menggunakan dataset yang sama dari sebelumnya. Dapat dilihat bahwa terdapat data yang duplikat (dapat dilihat pada baris yang digaris bawah).
Oleh karena itu, klausa GROUP BY dapat dituliskan sebagai berikut:
atau
Dapat dilihat pada kedua gambar di atas, bahwa penulisan nama kolom setelah klausa GROUP BY dapat diganti dengan menggunakan angka di mana angka 1 menandakan kolom 1, angka 2 menandakan kolom 2, dan seterusnya.
Apabila logic di atas dijalankan, akan memperoleh hasil seperti pada gambar di bawah ini:
#3 Penggunaan Klausa GROUP BY dengan ORDER BY
Dalam mengolah data, klausa ORDER BY banyak digunakan untuk mengurutkan data pada kolom yang dipilih. Secara bawaan, klausa ORDER BY mengurutkan data secara ascending, di mana data yang diurutkan ke atas (dari nilai terkecil ke terbesar/dari abjad A ke Z).
Tetapi, apabila ingin mengurutkan data ke bawah (dari nilai terbesar ke terkecil/dari abjad Z ke A) maka harus ditambah kata kunci ‘DESC’ setelah nama kolom pada klausa ORDER BY.
{{COMPONENT_IDENTIFIER}}
Penulisan klausa GROUP BY pada skenario ini terletak setelah klausa FROM dan sebelum klausa ORDER BY. Dengan menggunakan dataset yang sama, dapat dilihat bahwa hasil yang diperoleh dari klausa GROUP BY dan fungsi agregat tidak berurut.
Dapat diperhatikan pada kolom report_date, tanggal yang tertera tidak berurut. Oleh karena itu, untuk mengurutkan data berdasarkan report_date baik secara ke atas (ascending) maupun ke bawah (descending) dapat diperoleh menggunakan logic berikut:
- Untuk urut ke atas (ascending)
- Untuk urut ke bawah (descending)
Apabila kedua logic tersebut dijalankan, maka akan menghasilkan data sebagai berikut
- Untuk urut ke atas (ascending)
- Untuk urut ke bawah (descending)
Penggunaan klausa ORDER BY tidak hanya dapat mengurutkan berdasarkan 1 kolom saja, tetapi dapat dilakukan untuk 2 atau lebih kolom. Penulisan klausa ORDER BY untuk 2 atau lebih kolom hampir serupa dengan penulisan klausa GROUP BY dengan 2 atau lebih kategori di mana nama kolom dipisahkan dengan tanda ‘koma’.
Tetapi yang membedakan penulisan klausa ORDER BY dengan GROUP BY adalah pada klausa ORDER BY, urutan nama kolom mempengaruhi pengurutan data, sedangkan pada klausa GROUP BY tidak. Sebagai contoh:
Penulisan 1
Penulisan 2
Hasil Penulisan 1
Hasil Penulisan 2
Dapat dilihat dari contoh di atas, urutan nama kolom pada klausa ORDER BY berpengaruh dengan urutan hasil yang akan diperoleh.
#4 Penggunaan Klausa GROUP BY dengan HAVING vs WHERE
Penggunaan klausa HAVING dan WHERE banyak digunakan untuk memfilter data yang ada sesuai dengan kriteria yang diberikan. Perbedaannya adalah klausa WHERE digunakan untuk memfilter data mentah sedangkan klausa HAVING digunakan untuk memfilter data yang sudah diagregat/ dikelompokan.
Penulisan klausa GROUP BY dengan klausa HAVING pun juga berbeda dengan penulisan klausa WHERE. Klausa WHERE ditaruh sebelum klausa GROUP BY sedangkan klausa HAVING ditaruh setelah klausa GROUP BY.
Misalkan data yang diinginkan hanya sampah dengan kategori ‘RECYCLING - COMINGLE’, maka penulisan logic-nya adalah sebagai berikut:
GROUP BY - WHERE
GROUP BY - HAVING
Hasil dari GROUP BY - WHERE
Hasil dari GROUP BY - HAVING
Apabila dilihat dari hasil akhirnya, kedua klausa baik klausa WHERE dan klausa HAVING memperoleh hasil yang sama. Tetapi, proses untuk memperoleh hasil tersebut berbeda.
Pada penulisan logic GROUP BY - WHERE, seluruh data yang ada difilter terlebih dahulu kemudian diagregat/dikelompokan.
{{COMPONENT_IDENTIFIER}}
Sedangkan pada penulisan logic GROUP BY - HAVING, seluruh data diagregat dan dikelompokan terlebih dahulu dan hasil agregat tersebut difilter sesuai dengan kondisi pada klausa HAVING.
Tidak hanya itu, yang membedakan klausa WHERE dan HAVING adalah pada klausa HAVING kondisi yang diinginkan dapat berbentuk fungsi agregat, sedangkan pada klausa WHERE tidak bisa.
Sebagai contoh:
Penggunaan Klausa GROUP BY dengan HAVING, WHERE, ORDER BY dan perbedaannya
Dalam melakukan pengolahan data, klausa GROUP BY dapat digabung dengan klausa lain seperti klausa HAVING, WHERE, maupun ORDER BY. Setiap klausa yang digunakan memiliki perannya masing-masing yaitu:
- Klausa WHERE : memfilter data mentah sesuai dengan kondisi yang diinginkan
- Klausa GROUP BY : mengelompokkan data yang ada sesuai dengan kategori
- Klausa HAVING : memfilter data yang sudah di agregat/dikelompokan
- Klausa ORDER BY : mengurutkan data yang sudah difilter dan di agregat sehingga menghasilkan data akhir yang dapat digunakan untuk analisis.
Walaupun skenario ini cukup jarang digunakan dalam praktiknya, tetapi secara teori, keempat klausa tersebut dapat digunakan secara bersamaan.
Penutup
Klausa GROUP BY dapat digunakan untuk melakukan pengelompokan terhadap data yang ada sesuai dengan kategorinya. Penggunaan klausa GROUP BY umumnya digunakan bersamaan dengan fungsi agregat tetapi tidak menutup kemungkinan klausa GROUP BY dapat digunakan tanpa fungsi agregat.
Tidak hanya itu, klausa GROUP BY juga dapat digunakan dengan klausa ORDER BY, WHERE, maupun HAVING. Di mana klausa ORDER BY berfungsi untuk mengurutkan data yang sudah dikategorikan. Sedangkan klausa WHERE dan HAVING digunakan untuk memfilter data sesuai dengan kondisi yang diinginkan.
Sumber Data:
Contoh data diambil dari public dataset GBQ:
Query:
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)
Masih ragu? Coba dulu 3 hari, GRATIS
di Full-Stack Trial Class!
Rasakan pengalaman belajar di RevoU Full-Stack Program: Kelas 100% LIVE, Mini portofolio lewat hands-on assignment, Bimbingan Team Lead & small group discussion. Kalau cocok, kamu bisa lanjut daftar Full Program dengan kesempatan Fast-Track (skip semua tes seleksi masuk, langsung ke tahap akhir!)