聚合函数

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

关于聚合函数

Windows Search 结构化查询语言 (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')))

返回值

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