集計関数
集計関数は、値のセットに対して計算を実行し、値を返します。 これにより、オーバーヘッドがほとんどない複数レベルのグループの概要統計を生成できます。
集計関数について
Windows Search 構造化照会言語 (SQL) の集計関数の構文は次のとおりです。
AGGREGATE <function> [AS <label>] [,<function> [AS <label>]]*
関数部分には、次の関数と構文のいずれかを含めることができます。
機能 | 説明 |
---|---|
AVG(<column>) | グループ内の値の平均を返します。 数値にのみ適用されます。 |
BYFREQUENCY(<column>, <N>) | グループ内の結果から最も頻繁に N 列の値を返します。 また、各値が発生した回数と、返される各値を含む結果のドキュメント識別子も含まれます。 |
CHILDCOUNT() | グループ (サブグループを除く) 内の項目の数を返します。 グループ化のレベルが複数ある場合は、直接の子グループの数が返されます。 |
Count() | グループ内の項目数とすべてのサブグループを返します。 |
DATERANGE(<column>) | グループの結果グループに含まれる列の値の下限と上限を返します。 filetime プロパティに対してのみ有効です。 |
FIRST(<column>, <N>) | グループ内で見つかったリーフの結果から、最初の N 列の値を返します。 |
MAX(<column>) | 式内の最大値を返します。 数値または日付にのみ適用されます。 |
MIN(<column>) | 式の最小値を返します。 数値または日付にのみ適用されます。 |
REPRESENTATIVEOF(<column>, <idRepresentative>, <N>) | 一意の列値を持つ結果サブセットの 1 つから選択された N 個の idRepresentative 値を返します。 各値は、idRepresentative 値を持つドキュメント識別子でも返されます。 |
SUM(<column>) | グループ内の値の合計を返します。 数値にのみ適用されます。 |
Note
集計は個々の列として返されます。 これらは、複合型として返される ByFrequency、First、DateRange、および RepresentativeOf を除き、ほとんど単純な型です。
SELECT 句に含まれる集計だけでなく、任意の数値列または日付列を集計に使用できます。 ただし、集計でグループ化することはできません。 渡された列引数が数値型または日付型でない場合は、構文エラーが返されます。
ラベル部分は省略可能であり、ラベルの別名を読みやすくします。 エイリアス ラベルを含まない場合、Windows Search は関数と列名をラベルに変換します。 たとえば、MAX(System.Document.WordCount) はMAX_SystemDocumentWordCountになります。
複数レベルのグループとカウント
集計はリーフに対して定義され、重複しています。 集計は、その子のサブグループではなく、それを定義するグループのリーフ (ドキュメント) を入力として受け取ります。 この機能は、複数レベルのグループ化と呼ばれます。
リーフに対して定義され、重複する集計に加えて、集計は 1 回だけカウントされます。 同じドキュメントが 1 つのグループの下で複数回表される場合でも、集計では 1 回だけ考慮されます。 次の図は、この概念を示しています。
集計の例
GROUP ON 句内の集計関数の例を次に示します。
GROUP ON System.Sender ['d','m','r']
AGGREGATE COUNT() as 'Total',
MAX(System.Size) as 'Max Size',
MIN(System.Size) as 'Min Size'
OVER (SELECT System.Subject FROM systemindex)
GROUP ON System.Sender ['d', 'm', 'r']
AGGREGATE MAX(System.Search.Rank) as 'MaxRank',
MIN(System.Search.Rank) as 'MinRank'
OVER (GROUP ON system.conversationID
OVER (SELECT workid, System.ItemUrl FROM systemindex
WHERE CONTAINS (*, 'sometext')
ORDER BY System.DateCreated))
GROUP ON System.FileName [before('a'),before('z')]
AGGREGATE MAX(System.Size) as 'maxsize', MIN(System.Size) as 'MinSize'
OVER (SELECT System.FileName FROM systemindex
ORDER BY System.FileName)
GROUP ON System.author
AGGREGATE MAX(System.size) as 'maxsize'
ORDER BY min(System.Size)
OVER (GROUP ON System.DateCreated
AGGREGATE Count()
ORDER BY MAX(System.size)
OVER (SELECT filename, System.DateCreated, System.Size FROM systemindex
WHERE CONTAINS('text')))
戻り値
戻り値は、指定されたエイリアスとして、またはエイリアス ラベルが指定されていない場合は "Aggregates" として、カスタム プロパティとして行セットで見つかったバリアントです。