Scenariusz:
Pracujesz jako programista SQL Server, zostaniesz poproszony o napisanie zapytania, które powinno zwrócić Total SaleAmount z tabeli dbo.Customer według CountryShortName. Zostaniesz również poproszony o filtrowanie rekordów, w których Total SaleAmount według CountryShortName jest większy niż 10.Rozwiązanie:
Z powyższego scenariusza zauważyłeś kilka rzeczy. Najpierw musimy zsumować SaleAmount. Po drugie musimy pogrupować według SaleAmount według CountryShortName. Ostatnią rzeczą, którą musimy filtrować te rekordy po obliczeniu sumy i zwraca tylko wtedy, gdy całkowita wartość SaleAmount jest większa niż 10. Nie możemy tutaj użyć klauzuli Where, ponieważ gdzie będzie filtrować rekordy przed Grupuj według. SQL Server udostępnia nam klauzulę Have, której możemy użyć do filtrowania rekordów po group by.Utwórzmy tabelę dbo.Customer z poniższymi rekordami, a następnie napisz zapytanie, używając klauzuli Group by i 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)Napiszmy naszą kwerendę, używając opcji Group by, a następnie użyj opcji Mając do filtrowania rekordu, w którym Sum(SaleAmount) jest większa niż 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Jak filtrować zagregowane dane za pomocą klauzuli Have w SQL
Demo wideo:Jak używać klauzuli o klauzuli w instrukcji SQL Select