集計ごとのフィルタ

各集計に固有の、フィルタリング用のWHERE句を指定できます。集計関数フィルタは、集計式の入力をフィルタリングします。これが役に立つのは、スパースまたは異種混在のデータを扱うときです。レコードのうち、フィルタ条件を満たすもののみが集計関数の計算に使用されます。

集計ごとのWHEREフィルタは、実際に前集計に適用されます。この理由は、後集計まで遅延した場合、実装が必ずしも必要な列のすべてにアクセスできるとはかぎらないためです。

集計ごとの構文は次のとおりです。
AggregateFunction(Expression) WHERE (Filter)
次に例を示します。
RETURN NetSales AS 
SELECT
  SUM(Amount) WHERE (Type='Sale') AS SalesTotal,
  SUM(Amount) WHERE (Type='Return') AS ReturnTotal,
  ARB(SalesTotal – ReturnTotal) AS Total
GROUP BY Year, Month, Category
これは、次のものと同じです。
SUM(CASE WHEN Type='Sale' THEN Amount END) AS SalesTotal,
SUM(CASE WHEN type='Return' THEN Amount END) AS ReturnTotal
...
注意: これらのWHERE句は、レコードに対しても作用しますが、割当てには作用しません(文レベルのWHERE句と同様)。ソース・レコードが集計の対象となるのは、そのレコードが文レベルのWHERE句と集計のWHERE句を通過した場合です。