聚合函數

聚合函數會對一組值執行計算,並傳回值。 如此一來,就能夠產生多層級群組的摘要統計數據,而不需要額外負荷。

關於彙總函數

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')))

返回值

傳回值是在數據列集上找到做為自定義屬性的變體,可以是指定的別名,如果沒有指定別名標籤,則為 “Aggregates”。