5 Kesalahan Umum dalam Penulisan SQL GROUP BY

Dalam operasi SQL, terdapat banyak sekali kata kunci yang digunakan untuk melengkapi perintah SELECT. Salah satunya yang digunakan adalah SQL GROUP BY. SQL GROUP BY merupakan fungsi yang digunakan untuk mengelompokkan data sekaligus menampilkan data yang diinginkan baik kolom maupun baris. SQL GROUP BY menghasilkan kelompok data dengan menghilangkan data yang sama dalam satu tabel. Apabila satu kolom terdapat beberapa data yang sama maka data yang akan ditampilkan hanya salah satu.
SQL GROUP BY digunakan untuk menggabungkan data dengan nilai yang sama dalam daftar bidang tertentu menjadi satu data. Pernyataan SQL group by ini sering digunakan untuk fungsi agregat seperti COUNT, MAX, MIN, SUM, AVG untuk mengelompokkan hasil yang ditetapkan oleh satu kolom atau lebih. Adapun format penulisan SQL GROUP BY adalah sebagai berikut:
SELECT [KOLOM1], [KOLOM2] FROM NAMA_TABEL GROUP BY [KOLOM1], [KOLOM2]
Tapi seringkali user saat melakukan akses database mengalami kesalahan penulisan pada sintaks GROUP BY SQL. Hal ini tentunya akan berpengaruh dalam output yang dihasilkan. Ketika kita salah menuliskannya maka hasilnya juga bisa salah. Kesalahan-kesalahan ini perlu kalian waspadai bagi para pemula yang ingin belajar terkait SQL. Kira-kira apa saja kesalahan yang biasanya terjadi? DQLab sudah merangkum informasinya untuk kamu, simak artikelnya sampai habis ya!
1. Lupa Menuliskan GROUP BY dengan Fungsi Aggregate
Kesalahan pertama yang seringkali disepelekan dalam melakukan penulisan SQL GROUP BY adalah lupa menuliskan perintah GROUP BY dengan fungsi aggregate. Fungsi agregate disini seperti AVG, MAX, MIN, COUNT dan lain-lain. Ketika user menggunakan perintah SELECT dan diiringi dengan GROUP BY biasanya dipakai untuk mengelompokkan baris ke dalam grup spesifik sesuai dengan kondisi tabel yang ada. Kemudian dilakukan perhitungan pada masing-masing grup yang sudah dikumpulkan tadi.
Namun terkadang, user ketika mengakses database lupa untuk menyertakan perintah GROUP BY di dalam pernyataan sintaks SELECT. Saya berikan satu contoh dibawah ini. Anggaplah saya memiliki tabel resep yang berisi 100 baris data dengan 6 kolom. Berikut adalah penampakan dari tabelnya:
Berikut adalah penjelasan dari masing-masing kolom:
Meal_category - kategori sajian menu yang diolah (sup, minuman, makanan penutup/desserts, bread and pastry dan lain-lain).
Name - Nama resep yang akan diolah
Author - Nama chef yang memasak olahan makanan dan minuman yang disajikan
No_of_views -Total tayangan resep yang sudah ditonton dalam bulan ini
No_of_views_1st_mth - total tayangan pada bulan sebelumnya
Author_id - kode unik dari chef
Contoh kita ingin menghitung jumlah resep pada tiap kategorinya. Kemudian kamu ingin menuliskan sintaksnya tanpa GROUP BY.
Hasilnya ketika kode tersebut dijalankan menjadi sebagai berikut
Penjumlahan yang sudah dilakukan menghasilkan nilai 100 pada kategori menu cold appetizer. Jumlah ini adalah jumlah seluruh kategori yang hanya ada di menu tersebut yaitu cold appetizer atau makanan pembuka. Padahal kita ingin jumlah dari masing-masing kelompok menu. Pastinya kalau begini akan membingungkan pembaca terkait dengan hasil running data. Ingat tujuan kita di awal adalah menjumlahkan setiap kategori dari masing-masing menu. Untuk mengatasi hal tersebut maka kita perlu menambahkan perintah GROUP BY meal_category di bagian akhir sintaks.
Kenapa demikian?
Baris data digabungkan berdasarkan kategori resep. Misalnya dessert dijadikan satu grup sendiri, sup sendiri, makanan utama sendiri. Kolom meal_category dispesifikkan dengan menggunakan perintah GROUP BY. Kemudian diikuti dengan SELECT.
Setiap group menggunakan fungsi aggregate berupa COUNT untuk menghitung total resep setiap groupnya
Berikut adalah hasilnya:
Baca juga : Saatnya Belajar SQL, Kenali Rekomendasi Query SQL Bagi Pemula
2. Sulit Membedakan WHERE dengan HAVING
Kesalahan kedua adalah sulit membedakan kapan memakai WHERE dan HAVING. Kita masih menggunakan contoh yang sama. Apabila kita ingin melihat kategorinya dan menampilkan data lebih dari 10 resep, terkadang pemula yang baru belajar SQL menuliskan kuerinya seperti ini:
Sintaks diatas justru menghasilan error. Kenapa? Karena user tidak menggunakan fungsi aggregat di bagian WHERE. WHERE digunakan bersamaan dengan GROUP BY apabila kita ingin menyaring baris sebelum datanya dikelompokkan. Dalam contoh ini, kita mau menyaring barisnya setelah datanya sudah dikelompokkan. Jadi yang kita butuhkan adalah fungsi HAVING bukan WHERE. Bedanya gimana? Nih, lihat contoh berikut
Contoh 1 - Melakukan Pengelompokkan Kategori Menu dengan Tontonan Lebih dari 1M
Berikut adalah kode yang dituliskan jika ingin melakukan pengelompokkan kategori resep yang telah ditonton lebih dari 1M Views.
Apabila kita menggunakan HAVING maka kita ingin menyaring data setelah dikelompokkan. Berikut adalah hasilnya:
Contoh 2 - Kinerja John dalam Tiap Kategori Menu
Kita akan coba pakai contoh lain untuk melakukan kalkulasi kinerja John dalam menyajikan kategori menu. Berikut adalah kodenya:
Kita menggunakan WHERE apabila kita ingin menyaring data dari John saja sebelum kita ingin mengelompokkannya dalam kategori menu yang disajikan. Berikut adalah hasilnya:
3. Mencantumkan Kolom Tidak di GROUP BY
Kesalahan ketiga adalah melakukan listing pada kolom dengan menggunakan perintah SELECT tapi tidak menuliskannya pada GROUP BY. Contoh kasus, kita ingin melihat total tayangan resep yang sudah ditonton pada setiap kategori menu. Tiba-tiba, kita ingin menambahkan kolom author di sebelum kueri. Berikut adalah kodenya:
Nah, kesalahan yang terjadi ketika ingin menuliskan perintah GROUP BY adalah kita ingin menambahkan kolom author pada kolom SELECT tapi tidak di dalam sintaks GROUP BY. Tentunya akan menghasilkan hasil yang berbeda bukan. Padahal SQL tidak tahu bagaimana menghitung total tiap chef karena tidak menyertakan GROUP BY di bagian akhir kolom author.
Tentu hasilnya akan error dan akan menyebabkan kesalahan dalam penulisan SQL GROUP BY. Lalu kode yang benar seperti apa? Berikut adalah kodenya
Berikut adalah hasilnya apabila sudah ditambahkan kolom author pada sintaks GROUP BY.
Perlu diingat bahwa semua kolom yang tidak teragregasi dengan perintah SELECT juga harus dicantumkan pada GROUP BY. Nah, pada contoh berikut kolom yang tidak teragregasi adalah meal_category dan author. Maka dari itu, kolom yang tidak teragregasi juga disematkan perintah SELECT dan GROUP BY.
Baca juga : Catat! Ini 3 Keuntungan Belajar SQL dalam Mengolah Data
4. Tidak Dikelompokkan dengan Unique Key
Kesalahan keempat adalah tidak tergabung datanya dengan kata kunci unique. Misalnya kita ingin menghitung rata-rata jumlah yang ditonton pada setiap resep yang dibuat oleh chef. Query ini dikalkulasikan berupa rata-rata total tontonan setiap kategori menu dan setiap chef. Berikut adalah kodenya:
Apabila kode tersebut dijalankan maka akan menghasilkan output sebagai berikut:
Namun, sebenarnya kami memiliki dua chef yang bernama Lisa pada tabel tersebut. Ketika dikelompokkan hasil menurut kolom penulis, Lisa dua-duanya dirata-ratakan. Kenapa? Sebab, user menggunakan kolom Unique Key dalam file GROUP BY. Apabila ingin melihat rata-rata Lisa secara terpisah maka kita perlu menambahkan author_id (kolom unik) ke dalam GROUP BY.
Sekarang kita bisa melihat hasilnya secara langsung antara Lisa yang id=11 dengan Lisa yang memiliki id=5.
Penggunaan SQL group by seringkali dibutuhkan oleh para praktisi data dalam proses mengakses atau menampilkan data. Untuk lebih memahaminya kalian bisa mulai mencoba mempraktekannya menggunakan salah satu modul DQLab yang berjudul Fundamental SQL Using Functions and Group By.
DQLab menyajikan materi secara teori maupun praktek. Selain itu di DQLab pun menyediakan berbagai modul dan ebook dengan materi yang beragam sesuai kebutuhan. Cara bergabungnya sangat mudah. Langsung saja sign up di DQLab.id dan nikmati belajar data science DQLab.
Penulis: Reyvan Maulid
Postingan Terkait
Menangkan Kompetisi Bisnis dengan Machine Learning
Mulai Karier
sebagai Praktisi Data
Bersama DQLab
Daftar sekarang dan ambil langkah pertamamu untuk mengenal Data Science.