集計関数は、一連の値に対して計算を実行し、値を返します。 これにより、オーバーヘッドがほとんどない複数レベルのグループの概要統計を生成できます。
集計関数について
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>) | グループ内の値の合計を返します。 数値にのみ適用されます。 |
手記
集計は、個々の列として返されます。 これらはほとんどの場合、複合型として返される 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" として、カスタム プロパティとして行セットで見つかったバリアントです。