グループ化されたデータのフィルタリング

概要: ループ化されたデータのフィルタリング

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句の使用

Numbers of Islands, Oceans, and Seas

HAVINGとWHEREの選択

HAVING句とWHERE句の違いを次の表に示します。HAVING句はデータのグループを操作するときに使用されるため、HAVING句を含むクエリには、通常、次の要素も含まれます。

  • GROUP BY句
  • 集計関数
ヒントHAVING句は、グループに関してWHERE句に似ています。
注: GROUP BY句なしでHAVING句を使用する場合、クエリが少なくとも1つの集計関数を参照しているならば、SQLプロシジャは、入力データを、それが単一のデータグループにより提供されるものであるかのように扱います。
HAVING句とWHERE句の違い

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句の使用

Total Populations of Continents with More than 15 Countries
最終更新: 2026年4月14日