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
WHERE
diterapkan terlebih dahulu ke baris individual dalam tabel atau objek bernilai tabel di panel Diagram . Hanya baris yang memenuhi syarat dalam klausaWHERE
yang akan dikelompokkan.Klausa
HAVING
kemudian diterapkan ke baris dalam tataan hasil. Hanya grup yang memenuhi kondisi yangHAVING
muncul dalam output kueri. Anda hanya dapat menerapkanHAVING
klausa ke kolom yang juga muncul di klausa GROUP BY 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
WHERE
kondisi.Kosongkan kolom Output kecuali kolom data adalah bagian dari klausa GROUP BY atau disertakan dalam fungsi agregat.
Di kolom Filter , tentukan kondisinya
WHERE
. Desainer Kueri dan Tampilan menambahkan kondisi keHAVING
klausa pernyataan SQL.Nota
Kueri yang diperlihatkan dalam contoh untuk prosedur ini menggabungkan dua tabel,
titles
danpublishers
.Pada titik ini dalam kueri, pernyataan SQL berisi
HAVING
klausa: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
HAVING
klausa dalam pernyataan SQL dan menambahkannya keWHERE
klausa.Pernyataan SQL berubah untuk menyertakan
WHERE
klausul 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;