Scénář:
Pracujete jako vývojář SQL Serveru, budete požádáni, abyste napsali dotaz, který by měl vrátit Total SaleAmount z tabulky dbo.Customer podle CountryShortName. Budete také požádáni o filtrování záznamů, kde je Total SaleAmount podle CountryShortName větší než 10.Řešení:
Z výše uvedeného scénáře jste si všimli několika věcí. Nejprve musíme sečíst SaleAmount. Za druhé, musíme seskupit podle SaleAmount podle CountryShortName. Poslední věc, kterou potřebujeme odfiltrovat tyto záznamy po výpočtu součtu a vrátí se pouze tam, kde je celková částka SaleAmount větší než 10. Nemůžeme zde použít klauzuli Where jako where bude filtrovat záznamy před Seskupit podle. SQL Server nám poskytuje klauzuli Having, kterou můžeme použít k filtrování záznamů po skupině podle.Pojďme vytvořit tabulku dbo.Customer s níže uvedenými záznamy a poté napište náš dotaz pomocí klauzule Group by a 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)Napišme náš dotaz pomocí Seskupit podle a pak pomocí Having vyfiltrovat záznam, kde Sum(SaleAmount) je větší než 10.
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10Jak filtrovat agregovaná data pomocí klauzule Having v SQL
Video ukázka:Jak používat klauzuli Having v příkazu SQL Select