Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como aplicar a Cláusula Tendo com Grupo por na Consulta Select - Tutorial SQL Server / TSQL Parte 131

Cenário:

Você está trabalhando como desenvolvedor do SQL Server, você é solicitado a escrever uma consulta que deve retornar Total SaleAmount da tabela dbo.Customer por CountryShortName. Também é solicitado que você filtre os registros em que Total SaleAmount por CountryShortName for maior que 10.


Solução:

Do cenário acima, você notou algumas coisas. Primeiro, precisamos somar o SaleAmount. Em segundo lugar, precisamos agrupar pelo SaleAmount por CountryShortName. A última coisa que precisamos é filtrar esses registros depois de calcular a soma e só retorna onde total SaleAmount for maior que 10. Não podemos usar a cláusula Where aqui pois onde vai filtrar os registros antes de Group by. O SQL Server nos fornece a cláusula Tendo que podemos usar para filtrar os registros após agrupar por.
Vamos criar a tabela dbo.Customer com os registros abaixo e, em seguida, escrever nossa consulta usando a cláusula Group by e Tendo.

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)
 
 
 Vamos escrever nossa consulta usando Group by e, em seguida, usar Tendo para filtrar o registro em que Sum(SaleAmount) é maior que 10.
SELECT countryshortname, 
       Sum(saleamount) SaleAmountByCountry 
FROM   dbo.customer 
GROUP  BY countryshortname 
HAVING Sum(saleamount) > 10 
 Como filtrar dados agregados usando a cláusula Tendo no SQL 


Demonstração em vídeo:como usar a cláusula Havendo na instrução SQL Select