グループ化されたデータのフィルタリング
概要: ループ化されたデータのフィルタリング
GROUP BY句と共にHAVING句を使用して、グループ化されたデータをフィルタリングできます。HAVING句は、WHERE句が個々の行に影響を与えるのと同様の方法で、グループに影響を与えます。HAVING句を使用すると、PROC SQLは、HAVING式を満たすグループのみを表示します。
単一のHAVING句の使用
次の例では、Featuresテーブルの機能をタイプ別にグループ化し、島、海、および海の数のみを表示します。
proc sql;
title 'Numbers of Islands, Oceans, and Seas';
select Type, count(*) as Number
from features
group by Type
having Type in ('Island', 'Ocean', 'Sea')
order by Type;
quit;
単一のHAVING句の使用

HAVINGとWHEREの選択
HAVING句とWHERE句の違いを次の表に示します。HAVING句はデータのグループを操作するときに使用されるため、HAVING句を含むクエリには、通常、次の要素も含まれます。
- GROUP BY句
- 集計関数
|
HAVING句の特徴 |
WHERE句の特徴 |
|---|---|
|
通常は、テーブルの行のグループを含めるため、または除外するための条件の指定に使用されます。 |
テーブルの個々の行を含めるため、または除外するための条件の指定に使用されます。 |
|
クエリ内でGROUP BY句と共に使用された場合、必ずそのGROUO BY句の後に記述されます。 |
クエリ内でGROUP BY句と共に使用された場合、必ずそのGROUO BY句よりも前に記述されます。 |
|
GROUP BY句の影響を受けます。GROUP BY句が存在しない場合、HAVING句はWHERE句と同様に扱われます。 |
GROUP BY句の影響を受けません。 |
|
GROUP BY句およびすべての集計関数の実行後に処理されます。 |
GROUP BY句(存在する場合)およびすべての集計関数の実行前に処理されます。 |
HAVINGと集計関数の併用
次のクエリは、15を超える国があるすべての大陸の人口を返します。
proc sql;
title 'Total Populations of Continents with More than 15 Countries';
select Continent,
sum(Population) as TotalPopulation format=comma16.,
count(*) as Count
from countries
group by Continent
having count(*) gt 15
order by Continent;
quit;
HAVING式には、それぞれのグループ内の行の数をカウントするCOUNT関数が含まれています。
COUNT関数を含むHAVING句の使用
