Scenario:
U werkt als SQL Server-ontwikkelaar, u wordt gevraagd een query te schrijven die Total SaleAmount uit de tabel dbo.Customer per CountryShortName moet retourneren. U wordt ook gevraagd om de records te filteren waarbij Total SaleAmount op CountryShortName groter is dan 10.Oplossing:
Uit het bovenstaande scenario heb je een aantal dingen opgemerkt. Eerst moeten we het SaleAmount optellen. Ten tweede moeten we groeperen op SaleAmount op CountryShortName. Het laatste wat we nodig hebben om die records te filteren na het berekenen van de som en retourneert alleen waar het totale SaleAmount groter is dan 10. We kunnen de Where-clausule hier niet gebruiken, omdat de records vóór Group by worden gefilterd. SQL Server voorziet ons van de Having-clausule die we kunnen gebruiken om de records na group by te filteren.Laten we een dbo.Customer-tabel maken met onderstaande records en dan onze query schrijven met behulp van Group by en Having-clausule.
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)Laten we onze query schrijven door Groeperen op te gebruiken en vervolgens het record moeten filteren waarbij Sum(SaleAmount) groter is dan 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Geaggregeerde gegevens filteren met behulp van de Having-clausule in SQL
Videodemo:Hoe gebruik je een clausule in SQL Select-instructie