Skenario:
Anda bekerja sebagai pengembang SQL Server, Anda diminta untuk menulis kueri yang seharusnya mengembalikan Total SaleAmount dari tabel dbo.Customer oleh CountryShortName. Anda juga diminta untuk memfilter catatan di mana Total SaleAmount menurut CountryShortName lebih besar dari 10.Solusi:
Dari skenario di atas, Anda telah memperhatikan beberapa hal. Pertama kita perlu menjumlahkan SaleAmount. Kedua, kita perlu mengelompokkan berdasarkan SaleAmount berdasarkan CountryShortName. Hal terakhir yang kita perlukan untuk memfilter record-record tersebut setelah menghitung jumlah dan hanya mengembalikan dimana total SaleAmount lebih besar dari 10. Kita tidak dapat menggunakan klausa Where di sini sebagai dimana akan memfilter record sebelum Group by. SQL Server menyediakan klausa Have yang dapat kita gunakan untuk menyaring record setelah group by.Mari kita buat dbo.Customer Table dengan record di bawah ini lalu tulis query kita dengan menggunakan klausa Group by dan Have.
Create table dbo.Customer (Id int, FName VARCHAR(50), LName VARCHAR(50), CountryShortName CHAR(2), SaleAmount Int) GO --Insert Rows in dbo.Customer Table insert into dbo.Customer Values ( 1,'Raza','M','PK',10), (2,'Rita','John','US',12), (3,'Sukhi','Singh',Null,25), (4,'James','Smith','CA',60), (5,'Robert','Ladson','US',54), (6,'Alice','John','US',87), (6,'John',Null,'US',Null)Mari kita tulis query kita dengan menggunakan Group by dan kemudian gunakan Have untuk memfilter record dimana Sum(SaleAmount) lebih besar dari 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Cara memfilter data agregat dengan menggunakan klausa Memiliki dalam SQL
Video Demo :Cara menggunakan Memiliki Klausa di SQL Select Statement