Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come applicare la clausola Avere con Raggruppa per in Seleziona query - Tutorial SQL Server / TSQL Parte 131

Scenario:

Stai lavorando come sviluppatore di SQL Server, ti viene chiesto di scrivere una query che dovrebbe restituire Total SaleAmount dalla tabella dbo.Customer per CountryShortName. Ti viene anche chiesto di filtrare i record in cui Total SaleAmount per CountryShortName è maggiore di 10.


Soluzione:

Dallo scenario sopra, hai notato un paio di cose. Per prima cosa dobbiamo sommare SaleAmount. In secondo luogo, dobbiamo raggruppare per SaleAmount per CountryShortName. L'ultima cosa di cui abbiamo bisogno per filtrare quei record dopo aver calcolato la somma e restituisce solo dove SaleAmount totale è maggiore di 10. Non possiamo usare la clausola Where qui come where filtrerà i record prima di Raggruppa per. SQL Server ci fornisce una clausola Have che possiamo utilizzare per filtrare i record dopo il raggruppamento per.
Creiamo dbo.Customer Table con i record seguenti e quindi scriviamo la nostra query utilizzando Group by e la clausola 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)
 
 
 Scriviamo la nostra query utilizzando Raggruppa per e quindi utilizzare Dovendo filtrare il record in cui Sum(SaleAmount) è maggiore di 10.
SELECT countryshortname, 
       Sum(saleamount) SaleAmountByCountry 
FROM   dbo.customer 
GROUP  BY countryshortname 
HAVING Sum(saleamount) > 10 
 Come filtrare i dati aggregati utilizzando la clausola Have in SQL 


Demo video:come utilizzare la clausola Have nell'istruzione SQL Select