聚合函数

聚合函数对一组值执行计算并返回一个值。 这样做可以生成具有很少开销的多级组的摘要统计信息。

关于聚合函数

Windows 搜索结构化查询语言(SQL)中的聚合函数具有以下语法:

AGGREGATE <function> [AS <label>] [,<function> [AS <label>]]*

函数部分可以包括以下任何函数和语法:

功能 描述
AVG(<列>) 返回组中值的平均值。 仅适用于数字。
BYFREQUENCY(<列>,<N>) 从组中的结果中返回最常见的 N 列值。 还包括每个值发生的次数和包含每个返回值的结果的文档标识符的计数。
CHILDCOUNT() 返回组(不包括子组)中的项数。 如果有多个级别的分组,则返回即时子组的数目。
COUNT() 返回组和所有子组中的项数。
DATERANGE(<列>) 返回在组结果组中找到的列值的下限和上限。 仅对 filetime 属性有效。
FIRST(<列>、<N>) 返回组中的叶结果中的第一个 N 列值。
MAX(<列>) 返回表达式中的最大值。 仅适用于数字或日期。
MIN(<列>) 返回表达式中的最小值。 仅适用于数字或日期。
REPRESENTATIVEOF(<列>、<idRepresentative>、<N>) 返回 N idRepresentative 值,每个值都从具有唯一列值的结果子集中选择。 还返回每个值,其中包含 idRepresentative 值的文档标识符。
SUM(<列>) 返回组中的值的总和。 仅适用于数字。

 

 

注意

聚合以单个列的形式返回。 它们大多是简单的类型,除了 ByFrequency、First、DateRange 和 RepresentativeOf 之外,它们作为复合类型返回。

 

可以将任何数值列或日期列用于聚合,而不仅仅是 SELECT 子句中的数值列。 但是,不能对聚合进行分组。 如果传入的列参数不是数值类型或日期类型,则返回语法错误。

标签部分是可选的,它为标签提供了更易读的别名。 如果未包含别名标签,Windows 搜索会将函数和列名转换为标签。 例如,MAX(System.Document.WordCount)变为MAX_SystemDocumentWordCount。

多级组和计数

聚合是在叶子上定义的,并且是重复的。 聚合采用定义它的组(文档)而不是其子组的子组的叶子的输入。 此功能称为多级分组。

除了在叶子和重复项上定义的聚合外,它们只计算一次。 虽然同一文档可能在一个组下多次表示,但聚合只考虑一次。 下图说明了此概念。

关系图,显示对叶子和重复定义聚合,并且只计算一次

聚合示例

下面是 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')))

返回值

返回值是在行集上作为自定义属性找到的变体,可以是指定的别名,如果没有指定别名标签,则返回值为“聚合”。