Bagikan melalui


Menggunakan Klausa HAVING dan WHERE dalam Kueri yang Sama (Alat Database Visual)

Dalam beberapa kasus, Anda mungkin ingin mengecualikan baris individual dari grup (menggunakan klausa WHERE) sebelum menerapkan kondisi ke grup secara keseluruhan (menggunakan klausa HAVING).

Klausa HAVING seperti klausa WHERE, tetapi hanya berlaku untuk grup secara keseluruhan (yaitu, ke baris dalam kumpulan hasil yang mewakili grup), sedangkan klausul WHERE berlaku untuk baris individual. Kueri dapat berisi klausa WHERE dan klausa HAVING. Dalam kasus ini kita dapat:

  • Klausa WHERE diterapkan terlebih dahulu ke baris individual dalam tabel atau objek bernilai tabel di panel Diagram. Hanya baris yang memenuhi kondisi dalam klausa WHERE yang dikelompokkan.

  • Klausa HAVING kemudian diterapkan ke baris dalam set hasil. Hanya grup yang memenuhi kondisi HAVING yang muncul di output kueri. Anda dapat menerapkan klausa HAVING hanya ke kolom yang juga muncul dalam klausa GROUP BY atau dalam fungsi agregat.

Misalnya, bayangkan Anda menggabungkan titles tabel dan publishers untuk membuat kueri yang memperlihatkan harga buku rata-rata untuk sekumpulan penerbit. Anda ingin melihat harga rata-rata hanya untuk sekumpulan penerbit tertentu - mungkin hanya penerbit di negara bagian California. Dan bahkan kemudian, Anda ingin melihat harga rata-rata hanya jika lebih dari $ 10,00.

Anda dapat menetapkan kondisi pertama dengan menyertakan klausul WHERE, yang membuang penerbit apa pun yang tidak berada di California, sebelum menghitung harga rata-rata. Kondisi kedua memerlukan klausul HAVING, karena kondisi didasarkan pada hasil pengelompokan dan meringkas data. Pernyataan SQL yang dihasilkan mungkin terlihat seperti ini:

SELECT titles.pub_id, AVG(titles.price)  
FROM titles INNER JOIN publishers  
   ON titles.pub_id = publishers.pub_id  
WHERE publishers.state = 'CA'  
GROUP BY titles.pub_id  
HAVING AVG(price) > 10  

Anda dapat membuat klausa HAVING dan WHERE di panel Kriteria. Secara default, jika Anda menentukan kondisi pencarian untuk kolom, kondisi tersebut menjadi bagian dari klausa HAVING. Namun, Anda dapat mengubah kondisi menjadi klausa WHERE.

Anda dapat membuat klausa WHERE dan klausa HAVING yang melibatkan kolom yang sama. Untuk melakukannya, Anda harus menambahkan kolom dua kali ke panel Kriteria, lalu menentukan satu instans sebagai bagian dari klausa HAVING dan instans lainnya sebagai bagian dari klausa WHERE.

Untuk menentukan kondisi WHERE dalam kueri agregat

  1. Tentukan grup untuk kueri Anda. Untuk detailnya, lihat Baris Grup di Hasil Kueri (Alat Visual Database).

  2. Jika belum ada di panel Kriteria, tambahkan kolom yang ingin Anda jadikan dasar untuk kondisi WHERE.

  3. Kosongkan kolom Output kecuali kolom data adalah bagian dari klausa GROUP BY atau disertakan dalam fungsi agregat.

  4. Di kolom Filter , tentukan kondisi WHERE. Desainer Kueri dan Tampilan menambahkan kondisi ke klausa HAVING dari pernyataan SQL.

    Nota

    Kueri yang diperlihatkan dalam contoh untuk prosedur ini menggabungkan dua tabel, titles dan publishers.

    Pada titik ini dalam kueri, pernyataan SQL berisi klausa HAVING:

    SELECT titles.pub_id, AVG(titles.price)  
    FROM titles INNER JOIN publishers   
       ON titles.pub_id = publishers.pub_id  
    GROUP BY titles.pub_id  
    HAVING publishers.state = 'CA'  
    
  5. Di kolom Kelompokkan Menurut , pilih Di mana dari daftar opsi grup dan ringkasan. Desainer Kueri dan Tampilan menghapus kondisi dari klausa HAVING dalam pernyataan SQL dan menambahkannya ke klausa WHERE.

    Pernyataan SQL berubah untuk menyertakan klausa WHERE sebagai gantinya:

    SELECT titles.pub_id, AVG(titles.price)  
    FROM titles INNER JOIN publishers   
       ON titles.pub_id = publishers.pub_id  
    WHERE publishers.state = 'CA'  
    GROUP BY titles.pub_id  
    

Lihat Juga

Pengurutan dan Pengelompokan Hasil Kueri (Alat Database Visual)
Meringkas Hasil Kueri (Alat Database Visual)