sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo aplicar la cláusula Have con Group by en Select Query - SQL Server / Tutorial TSQL Parte 131

Escenario:

Está trabajando como desarrollador de SQL Server, se le pide que escriba una consulta que debería devolver Total SaleAmount de la tabla dbo.Customer por CountryShortName. También se le pide que filtre los registros en los que Total SaleAmount por CountryShortName sea mayor que 10.


Solución:

Desde el escenario anterior, ha notado un par de cosas. Primero necesitamos sumar el SaleAmount. En segundo lugar, debemos agrupar por SaleAmount por CountryShortName. Lo último que necesitamos para filtrar esos registros después de calcular la suma y solo devuelve donde el monto total de la venta es mayor que 10. No podemos usar la cláusula Where aquí, ya que filtrará los registros antes de Agrupar por. SQL Server nos proporciona la cláusula Tener que podemos usar para filtrar los registros después de agrupar por.
Vamos a crear la tabla dbo.Customer con los siguientes registros y luego escribir nuestra consulta usando la cláusula Agrupar por y Tener.

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)
 
 
 Escribamos nuestra consulta usando Agrupar por y luego use Tener para filtrar el registro donde Sum(VentaAmount) es mayor que 10.
SELECT countryshortname, 
       Sum(saleamount) SaleAmountByCountry 
FROM   dbo.customer 
GROUP  BY countryshortname 
HAVING Sum(saleamount) > 10 
 Cómo filtrar datos agregados usando la cláusula Have en SQL 


Video de demostración:cómo usar la cláusula Have en la instrucción SQL Select