Сценарий:
Вие работите като разработчик на SQL Server, от вас се иска да напишете заявка, която трябва да върне Total SaleAmount от таблицата dbo.Customer от CountryShortName. Също така трябва да филтрирате записите, където Total SaleAmount по CountryShortName е по-голям от 10.Решение:
От горния сценарий сте забелязали няколко неща. Първо трябва да сумираме SaleAmount. Второ, трябва да групираме по SaleAmount по CountryShortName. Последното нещо, което трябва да филтрираме тези записи, след като изчислим сумата и връща само когато общата SaleAmount е по-голяма от 10. Тук не можем да използваме клаузата Where, като къде ще филтрираме записите преди Group by. SQL Server ни предоставя клауза Having, която можем да използваме за филтриране на записите след група по.Нека създадем таблица dbo.Customer със записи по-долу и след това напишем нашата заявка, като използваме Group by и Having клауза.
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)Нека напишем нашата заявка, като използваме Group by и след това използваме Having за филтриране на записа, където Sum(SaleAmount) е по-голям от 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Как да филтрирате обобщени данни с помощта на клауза Having в SQL
Видео демонстрация:Как да използвате клауза в SQL Изявление за избор