シナリオ:
SQL Server開発者として働いている場合、CountryShortNameによってdbo.CustomerテーブルからTotalSaleAmountを返すクエリを作成するように求められます。また、CountryShortNameによるTotalSaleAmountが10より大きいレコードをフィルタリングするように求められます。解決策:
上記のシナリオから、いくつかのことに気づきました。まず、SaleAmountを合計する必要があります。次に、SaleAmountbyCountryShortNameでグループ化する必要があります。合計を計算した後にこれらのレコードをフィルタリングする必要がある最後のことは、SaleAmountの合計が10より大きい場合にのみ返されます。ここでは、Groupbyの前にレコードをフィルタリングするWhere句を使用できません。 SQL Serverは、groupbyの後にレコードをフィルタリングするために使用できるHaving句を提供します。以下のレコードを使用してdbo.CustomerTableを作成し、Groupbyおよび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を使用してクエリを記述し、Sum(SaleAmount)が10より大きいレコードをフィルタリングする必要があるを使用してみましょう。
SELECT countryshortname, Sum(saleamount) SaleAmountByCountry FROM dbo.customer GROUP BY countryshortname HAVING Sum(saleamount) > 10SQLでHaving句を使用して集約データをフィルタリングする方法
ビデオデモ:SQLSelectステートメントでHaving句を使用する方法