Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So wenden Sie die Having-Klausel mit Group by in Select Query an – SQL Server / TSQL-Tutorial Teil 131

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) > 10 
 So filtern Sie aggregierte Daten mithilfe der Having-Klausel in SQL 


Video-Demo:Verwendung der Having-Klausel in der SQL-Select-Anweisung