Szenario:
Sie arbeiten als SQL Server-Entwickler und werden gebeten, eine Abfrage zu schreiben, die Total SaleAmount aus der dbo.Customer-Tabelle nach CountryShortName zurückgeben soll. Sie werden auch aufgefordert, die Datensätze zu filtern, bei denen Total SaleAmount by CountryShortName größer als 10 ist.Lösung:
Aus dem obigen Szenario sind Ihnen einige Dinge aufgefallen. Zuerst müssen wir den SaleAmount summieren. Zweitens müssen wir nach SaleAmount nach CountryShortName gruppieren. Das Letzte, was wir brauchen, um diese Datensätze nach der Berechnung der Summe zu filtern, und gibt nur zurück, wo der Gesamtverkaufsbetrag größer als 10 ist. Wir können hier keine Where-Klausel verwenden, da where die Datensätze vor Group by filtert. SQL Server stellt uns eine Having-Klausel zur Verfügung, mit der wir die Datensätze nach Gruppieren nach filtern können.Lassen Sie uns eine dbo.Customer-Tabelle mit den folgenden Datensätzen erstellen und dann unsere Abfrage schreiben, indem Sie Group by und die Having-Klausel verwenden.
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)Schreiben wir unsere Abfrage mit Group by und verwenden Sie dann Having, um den Datensatz zu filtern, bei dem Sum(SaleAmount) größer als 10 ist.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10So filtern Sie aggregierte Daten mithilfe der Having-Klausel in SQL
Video-Demo:Verwendung der Having-Klausel in der SQL-Select-Anweisung