Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Dalam beberapa kasus, Anda mungkin ingin mengecualikan baris individual dari grup (menggunakan WHERE klausa) sebelum menerapkan kondisi ke grup secara keseluruhan (menggunakan HAVING klausa).
HAVING Klausa seperti WHERE klausa, tetapi hanya berlaku untuk grup secara keseluruhan (yaitu, ke baris dalam kumpulan hasil yang mewakili grup), sedangkan WHERE klausul berlaku untuk baris individual. Kueri dapat berisi WHERE klausa dan HAVING klausa. Dalam kasus ini kita dapat:
Klausa
WHEREditerapkan terlebih dahulu ke baris individual dalam tabel atau objek bernilai tabel di panel Diagram . Hanya baris yang memenuhi syarat dalam klausaWHEREyang akan dikelompokkan.Klausa
HAVINGkemudian diterapkan ke baris dalam tataan hasil. Hanya grup yang memenuhi kondisi yangHAVINGmuncul dalam output kueri. Anda hanya dapat menerapkanHAVINGklausa ke kolom yang juga muncul dalamGROUP BYklausa atau dalam fungsi agregat.
Tentukan klausa WHERE dan HAVING pada dua tabel yang digabungkan
Nota
Database yang digunakan dalam artikel ini adalah pubs database, dapat diperoleh dari sampel database Northwind dan pubs untuk Microsoft SQL Server di GitHub.
Misalnya, bayangkan Anda menggabungkan tabel titles dan publishers untuk membangun query 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 WHERE klausul, 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 peringkasan terhadap 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;
Di Alat Visual Database SQL Server Management Studio, Anda bisa membuat klausa HAVING dan WHERE di panel Kriteria . Secara default, jika Anda menentukan kondisi pencarian untuk kolom, kondisi tersebut menjadi bagian HAVING dari klausa. Namun, Anda dapat mengubah kondisi menjadi WHERE klausa.
Anda dapat membuat WHERE klausa dan HAVING klausa yang melibatkan kolom yang sama. Untuk melakukannya, Anda harus menambahkan kolom dua kali ke panel Kriteria , lalu menentukan satu instans sebagai bagian HAVING dari klausa dan instans lainnya sebagai bagian WHERE dari klausa.
Tentukan sebuah kondisi WHERE di dalam kueri agregat
Tentukan grup untuk kueri Anda. Untuk detailnya, lihat Baris Grup di Hasil Kueri (Alat Visual Database).
Jika belum ada di panel Kriteria , tambahkan kolom tempat Anda ingin mendasarkan
WHEREkondisi.Kosongkan kolom Output kecuali kolom data adalah bagian
GROUP BYdari klausa atau disertakan dalam fungsi agregat.Di kolom Filter , tentukan kondisinya
WHERE. Desainer Kueri dan Tampilan menambahkan kondisi keHAVINGklausa pernyataan SQL.Nota
Kueri yang diperlihatkan dalam contoh untuk prosedur ini menggabungkan dua tabel,
titlesdanpublishers.Pada titik ini dalam kueri, pernyataan SQL berisi
HAVINGklausa: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';Di kolom Kelompokkan Menurut , pilih Di mana dari daftar opsi grup dan ringkasan. Desainer Kueri dan Tampilan menghapus kondisi dari
HAVINGklausa dalam pernyataan SQL dan menambahkannya keWHEREklausa.Pernyataan SQL berubah untuk menyertakan
WHEREklausul 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;