Belajar SQL HAVING Clause, Fungsi, dan Contohnya

Yuk, pelajari lebih lanjut tentang SQL HAVING Clause, fungsi, sekaligus contohnya di artikel berikut!
Bobby Christian
August 10, 2023
6
min read

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
DAFTAR FULL PROGRAMCOBA COURSE GRATIS

Overview

Klausa HAVING di SQL berguna untuk memfilter data bersamaan dengan fungsi agregat, kegunaan yang tidak dimiliki WHERE. Lalu apa beda kedua klausa ini? Apakah bisa digunakan bersamaan?

Mungkin teman-teman data analyst yang pernah menggunakan bahasa pemrograman SQL sebelumnya pernah mendengar sebuah klausa SQL yang dapat digunakan untuk mem-filter kondisi. 

Biasanya, untuk membantu dalam filtering data dengan SQL, kita menggunakan WHERE condition, yang berfungsi untuk memberikan kondisi terhadap data yang ingin kita tampilkan, menggunakan klausa SELECT. Lantas, apa perbedaannya dengan klausa HAVING?

Perbedaan WHERE vs HAVING di SQL?  

HAVING merupakan salah satu klausa yang umum digunakan sebagai penetapan kondisi ketika kita menggunakan bahasa pemrograman SQL. Sebelumnya, mungkin kita pernah menggunakan klausa WHERE untuk menentukan kondisi. Apa yang membedakan antara klausa WHERE dan HAVING?

Klausa WHERE biasa digunakan untuk menerapkan kondisi di mana kondisi tersebut berdampak ke dalam tiap baris dan kolom data secara individu. Untuk Klausa HAVING memiliki fungsi yang sama dengan fungsi WHERE, namun HAVING digunakan untuk menerapkan kondisi pada hasil agregasi yang dihasilkan oleh fungsi agregat

Dalam artian teknis, kondisi WHERE dapat diterapkan apabila nilai kondisi yang diinginkan berada dan ada pada tabel. Ketika kita menggunakan WHERE untuk mencari nilai yang tidak secara langsung muncul pada tabel (seperti harus melakukan perhitungan dan fungsi lainnya terlebih dahulu), maka keseluruhan klausa tersebut akan gagal dieksekusi. Apabila kita memerlukan proses agregasi terlebih dahulu dimana kita hanya akan menampilkan yang nilainya sesuai dengan hasil proses yang dilakukan, maka kita akan menggunakan klausa HAVING. Salah satu ciri khas dari klausa HAVING adalah sudah pasti data tersebut akan dikelompokan terlebih dahulu menggunakan klausa GROUP BY.

Contoh Klausa HAVING Bisa Menggantikan WHERE di SQL 

Sebagai catatan penting, kita tidak bisa menggunakan fungsi WHERE untuk melakukan filter terhadap hasil dari data yang telah dilakukan fungsi GROUP BY. Perhatikan contoh berikut ini: 

Pada contoh di atas, kita menggunakan public data dari Google BigQuery untuk menerapkan fungsi kondisi pada data iowa_liquor_sales. Dapat kita lihat bahwa ketika kita menuliskan fungsi kondisi WHERE, di mana kita hanya ingin menampilkan hasil penjumlahan sales harian yang nilainya lebih dari 50, berakhir dengan sebuah error

Pada kalimat error tersebut, terlihat cukup jelas bahwa sebuah fungsi agregat tidak bisa digunakan pada klausa WHERE. Kita hanya bisa menggunakan klausa WHERE apabila kondisi tersebut berdampak pada tiap nilai pada tiap sel dalam data tersebut, berikut contohnya: 

Pada contoh query di atas, logika pemrograman tersebut akan berubah menjadi: Kita hanya menampilkan hasil penjumlahan harian dari sale_dollars yang nilainya (sebelum dijumlahkan) lebih dari 50. 

Apabila kita menemukan data di mana sale_dollars kurang dari 50, maka nilai tersebut tidak akan dijumlahkan dalam perhitungan, dan membuat kita kehilangan sebagian data. 

Untuk memecahkan masalah ini, kita menggunakan klausa HAVING. Klausa HAVING memiliki fungsi yang sama seperti WHERE, namun fungsi ini memang dipergunakan untuk menerapkan kondisi pada fungsi agregat. Bentuk penulisan dari query ini adalah: 

Untuk melihat contoh penerapannya, perhatikan query berikut ini. 

Perintah pada query di atas memiliki arti: Kita memilih kolom date dan total dari sale_dollars, di mana nilai total sale_dollars tersebut dikelompokkan berdasarkan tanggal, lalu kita hanya memilih data di mana total sale_dollars tersebut lebih dari 50

Perintah query ini sama seperti ketika kita melakukan pemrograman SQL yang pertama kali. Dengan perintah query ini, SQL akan melakukan penjumlahan dulu dan perhitungan dengan fungsi agregat, lalu kita akan menampilkan hanya data yang nilai penjumlahannya lebih besar dari 50. 

Karena klausa HAVING ini memang digunakan untuk menerapkan kondisi pada fungsi agregat, apabila kita memberikan sebuah kondisi yang tidak meliputi fungsi agregat di dalamnya, maka SQL akan mengembalikan error. Perhatikan contoh penulisan query-nya berikut ini: 

Pada error tersebut, dituliskan bahwa klausa HAVING mereferensikan kolom sale_dollars, di mana kolom tersebut tidak dikelompokkan (GROUP BY) ataupun tidak diberikan sebuah fungsi agregat. 

{{COMPONENT_IDENTIFIER}}

Dengan penemuan dan contoh query di atas, kita dapat mengetahui bahwa kita hanya bisa memberikan kondisi untuk fungsi agregat dengan menggunakan HAVING. Sedangkan selain fungsi agregat, kita bisa menggunakan fungsi WHERE

Cara Menggunakan HAVING dan WHERE Bersamaan

Apabila kita memiliki tugas untuk membuat query yang meliputi fungsi agregat dan juga tiap kolom atau data individu secara bersamaan, kita dapat menggunakan fungsi WHERE dan HAVING sekaligus. Bentuk penulisan query tersebut pada umumnya adalah sebagai berikut ini: 

Secara umum, bentuk penulisan lengkap dari sebuah query SELECT untuk memilih kolom atau data adalah seperti penulisan di atas. Query yang berwarna merah merupakan opsional, dan tidak wajib disertakan dalam penulisan SELECT pada umumnya. 

Namun apabila kita ingin menggunakan klausa HAVING untuk menerapkan kondisi pada sebuah fungsi agregat dan menerapkan kondisi pada pemilihan data pada tiap kolom/baris, kita menuliskan query dengan format seperti di atas.

Sebagai contoh, mari kita gunakan lagi data dari iowa_liquor_sales. Kita akan menampilkan data penjualan harian di mana data yang kita butuhkan adalah data berupa tanggal penjualan, total nilai penjualan pada kota bernama DES MOINES, lalu kita menampilkan hari apa saja yang memiliki penjualan lebih besar dari $ 100.000. 

Kita hanya akan menampilkan total sales yang diperoleh pada bulan Januari 2023 sampai Mei 2023 saja. Perhatikan bagaimana cara kita membangun query tersebut pada BigQuery.

Apabila query tersebut kita jalankan, maka kita akan mendapatkan hasil berikut:

Dari hasil data yang ditampilkan dengan menggunakan query di atas, kita bisa melihat bahwa pada kota Des Moines pada Januari 2023 sampai Mei 2023, tidak setiap hari memiliki total penjualan sebanyak lebih dari $100.000. Kita akan bandingkan apabila kita tidak memiliki klausa HAVING

Tanpa klausa HAVING dan hanya menyatakan nilai pada klausa WHERE akan mengakibatkan data yang ditampilkan berbeda sangat jauh. Oleh karena itu, penting untuk kita sebagai data analyst untuk mengetahui kapan harus menggunakan klausa HAVING dan kapan harus menggunakan klausa WHERE dalam penulisan sebuah query.

Penutup

Sebagai seorang data analyst, terkadang kita membutuhkan sebuah query yang menampilkan data di mana kita perlu hasil dari sebuah fungsi agregat (SUM, COUNT, MAX, MIN, AVG). 

Untuk menampilkan hasil fungsi agregat yang diinginkan, kita menggunakan HAVING dan tidak menggunakan klausa WHERE. Alasannya, klausa WHERE hanya digunakan untuk memberikan kondisi pada tiap data individu pada tiap baris dan kolom, sedangkan untuk memberikan kondisi pada sebuah fungsi agregat, kita menggunakan klausa HAVING

Klausa WHERE dan HAVING pun dapat digabungkan seperti pada contoh sebelumnya yang kita bahas. Lalu sama seperti pada klausa WHERE, kita juga bisa menuliskan lebih dari satu kondisi agregat pada klausa HAVING. Perlu diperhatikan juga bagaimana urutan penulisan klausa WHERE dan HAVING pada sebuah query yang sama. 

Bobby Christian
Bobby is a BI Analyst at FnB company. Is an enthusiast in the Data Industry, having some experience in Data Scientist, Data Engineer, and BI Analyst.

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

Artikel Lainnya

Mau belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!
Menu

Mulai karirmu dalam

Data Analytics

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

Mau Belajar

Data Analytics

?

Belajar di RevoU! Dapatkan skill digital paling in-demand langsung dari praktisi terbaik di bidangnya. Kelas online 100% LIVE, 1:1 career coaching, dan akses ke Community Hub dengan 6000+ member selamanya untuk support perkembangan karir kamu!

DAFTAR FULL PROGRAM

Mau Belajar

Data Analytics

?

Belajar SQL HAVING Clause, Fungsi, dan Contohnya

Yuk, pelajari lebih lanjut tentang SQL HAVING Clause, fungsi, sekaligus contohnya di artikel berikut!
Bobby Christian
August 10, 2023
6
min read

Overview

Klausa HAVING di SQL berguna untuk memfilter data bersamaan dengan fungsi agregat, kegunaan yang tidak dimiliki WHERE. Lalu apa beda kedua klausa ini? Apakah bisa digunakan bersamaan?

Mungkin teman-teman data analyst yang pernah menggunakan bahasa pemrograman SQL sebelumnya pernah mendengar sebuah klausa SQL yang dapat digunakan untuk mem-filter kondisi. 

Biasanya, untuk membantu dalam filtering data dengan SQL, kita menggunakan WHERE condition, yang berfungsi untuk memberikan kondisi terhadap data yang ingin kita tampilkan, menggunakan klausa SELECT. Lantas, apa perbedaannya dengan klausa HAVING?

Perbedaan WHERE vs HAVING di SQL?  

HAVING merupakan salah satu klausa yang umum digunakan sebagai penetapan kondisi ketika kita menggunakan bahasa pemrograman SQL. Sebelumnya, mungkin kita pernah menggunakan klausa WHERE untuk menentukan kondisi. Apa yang membedakan antara klausa WHERE dan HAVING?

Klausa WHERE biasa digunakan untuk menerapkan kondisi di mana kondisi tersebut berdampak ke dalam tiap baris dan kolom data secara individu. Untuk Klausa HAVING memiliki fungsi yang sama dengan fungsi WHERE, namun HAVING digunakan untuk menerapkan kondisi pada hasil agregasi yang dihasilkan oleh fungsi agregat

Dalam artian teknis, kondisi WHERE dapat diterapkan apabila nilai kondisi yang diinginkan berada dan ada pada tabel. Ketika kita menggunakan WHERE untuk mencari nilai yang tidak secara langsung muncul pada tabel (seperti harus melakukan perhitungan dan fungsi lainnya terlebih dahulu), maka keseluruhan klausa tersebut akan gagal dieksekusi. Apabila kita memerlukan proses agregasi terlebih dahulu dimana kita hanya akan menampilkan yang nilainya sesuai dengan hasil proses yang dilakukan, maka kita akan menggunakan klausa HAVING. Salah satu ciri khas dari klausa HAVING adalah sudah pasti data tersebut akan dikelompokan terlebih dahulu menggunakan klausa GROUP BY.

Contoh Klausa HAVING Bisa Menggantikan WHERE di SQL 

Sebagai catatan penting, kita tidak bisa menggunakan fungsi WHERE untuk melakukan filter terhadap hasil dari data yang telah dilakukan fungsi GROUP BY. Perhatikan contoh berikut ini: 

Pada contoh di atas, kita menggunakan public data dari Google BigQuery untuk menerapkan fungsi kondisi pada data iowa_liquor_sales. Dapat kita lihat bahwa ketika kita menuliskan fungsi kondisi WHERE, di mana kita hanya ingin menampilkan hasil penjumlahan sales harian yang nilainya lebih dari 50, berakhir dengan sebuah error

Pada kalimat error tersebut, terlihat cukup jelas bahwa sebuah fungsi agregat tidak bisa digunakan pada klausa WHERE. Kita hanya bisa menggunakan klausa WHERE apabila kondisi tersebut berdampak pada tiap nilai pada tiap sel dalam data tersebut, berikut contohnya: 

Pada contoh query di atas, logika pemrograman tersebut akan berubah menjadi: Kita hanya menampilkan hasil penjumlahan harian dari sale_dollars yang nilainya (sebelum dijumlahkan) lebih dari 50. 

Apabila kita menemukan data di mana sale_dollars kurang dari 50, maka nilai tersebut tidak akan dijumlahkan dalam perhitungan, dan membuat kita kehilangan sebagian data. 

Untuk memecahkan masalah ini, kita menggunakan klausa HAVING. Klausa HAVING memiliki fungsi yang sama seperti WHERE, namun fungsi ini memang dipergunakan untuk menerapkan kondisi pada fungsi agregat. Bentuk penulisan dari query ini adalah: 

Untuk melihat contoh penerapannya, perhatikan query berikut ini. 

Perintah pada query di atas memiliki arti: Kita memilih kolom date dan total dari sale_dollars, di mana nilai total sale_dollars tersebut dikelompokkan berdasarkan tanggal, lalu kita hanya memilih data di mana total sale_dollars tersebut lebih dari 50

Perintah query ini sama seperti ketika kita melakukan pemrograman SQL yang pertama kali. Dengan perintah query ini, SQL akan melakukan penjumlahan dulu dan perhitungan dengan fungsi agregat, lalu kita akan menampilkan hanya data yang nilai penjumlahannya lebih besar dari 50. 

Karena klausa HAVING ini memang digunakan untuk menerapkan kondisi pada fungsi agregat, apabila kita memberikan sebuah kondisi yang tidak meliputi fungsi agregat di dalamnya, maka SQL akan mengembalikan error. Perhatikan contoh penulisan query-nya berikut ini: 

Pada error tersebut, dituliskan bahwa klausa HAVING mereferensikan kolom sale_dollars, di mana kolom tersebut tidak dikelompokkan (GROUP BY) ataupun tidak diberikan sebuah fungsi agregat. 

{{COMPONENT_IDENTIFIER}}

Dengan penemuan dan contoh query di atas, kita dapat mengetahui bahwa kita hanya bisa memberikan kondisi untuk fungsi agregat dengan menggunakan HAVING. Sedangkan selain fungsi agregat, kita bisa menggunakan fungsi WHERE

Cara Menggunakan HAVING dan WHERE Bersamaan

Apabila kita memiliki tugas untuk membuat query yang meliputi fungsi agregat dan juga tiap kolom atau data individu secara bersamaan, kita dapat menggunakan fungsi WHERE dan HAVING sekaligus. Bentuk penulisan query tersebut pada umumnya adalah sebagai berikut ini: 

Secara umum, bentuk penulisan lengkap dari sebuah query SELECT untuk memilih kolom atau data adalah seperti penulisan di atas. Query yang berwarna merah merupakan opsional, dan tidak wajib disertakan dalam penulisan SELECT pada umumnya. 

Namun apabila kita ingin menggunakan klausa HAVING untuk menerapkan kondisi pada sebuah fungsi agregat dan menerapkan kondisi pada pemilihan data pada tiap kolom/baris, kita menuliskan query dengan format seperti di atas.

Sebagai contoh, mari kita gunakan lagi data dari iowa_liquor_sales. Kita akan menampilkan data penjualan harian di mana data yang kita butuhkan adalah data berupa tanggal penjualan, total nilai penjualan pada kota bernama DES MOINES, lalu kita menampilkan hari apa saja yang memiliki penjualan lebih besar dari $ 100.000. 

Kita hanya akan menampilkan total sales yang diperoleh pada bulan Januari 2023 sampai Mei 2023 saja. Perhatikan bagaimana cara kita membangun query tersebut pada BigQuery.

Apabila query tersebut kita jalankan, maka kita akan mendapatkan hasil berikut:

Dari hasil data yang ditampilkan dengan menggunakan query di atas, kita bisa melihat bahwa pada kota Des Moines pada Januari 2023 sampai Mei 2023, tidak setiap hari memiliki total penjualan sebanyak lebih dari $100.000. Kita akan bandingkan apabila kita tidak memiliki klausa HAVING

Tanpa klausa HAVING dan hanya menyatakan nilai pada klausa WHERE akan mengakibatkan data yang ditampilkan berbeda sangat jauh. Oleh karena itu, penting untuk kita sebagai data analyst untuk mengetahui kapan harus menggunakan klausa HAVING dan kapan harus menggunakan klausa WHERE dalam penulisan sebuah query.

Penutup

Sebagai seorang data analyst, terkadang kita membutuhkan sebuah query yang menampilkan data di mana kita perlu hasil dari sebuah fungsi agregat (SUM, COUNT, MAX, MIN, AVG). 

Untuk menampilkan hasil fungsi agregat yang diinginkan, kita menggunakan HAVING dan tidak menggunakan klausa WHERE. Alasannya, klausa WHERE hanya digunakan untuk memberikan kondisi pada tiap data individu pada tiap baris dan kolom, sedangkan untuk memberikan kondisi pada sebuah fungsi agregat, kita menggunakan klausa HAVING

Klausa WHERE dan HAVING pun dapat digabungkan seperti pada contoh sebelumnya yang kita bahas. Lalu sama seperti pada klausa WHERE, kita juga bisa menuliskan lebih dari satu kondisi agregat pada klausa HAVING. Perlu diperhatikan juga bagaimana urutan penulisan klausa WHERE dan HAVING pada sebuah query yang sama. 

Bobby Christian
Bobby is a BI Analyst at FnB company. Is an enthusiast in the Data Industry, having some experience in Data Scientist, Data Engineer, and BI Analyst.
Menu