COUNT 個
說明
COUNT
是一個視窗匯總函數,用於將列分組、依欄位對列進行排序,並傳回群組中有效列的總數 (NOT NULL)。您可以使用 COUNT
與其他函數一起計算累計匯總。該
PARTITION BY
子句決定要使用哪些欄位來將一組輸入列分組。該 ORDER BY
子句決定如何排序分區中的列。Workday 會根據分區欄位將輸入列分組,根據排序欄位對列進行排序,然後計算每個群組中的匯總運算式 (此函數的計數)。
語法
whereCOUNT(input_field)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]]RANGEBETWEENvaluePRECEDINGANDCURRENT ROW|ROWSwin_boundary|BETWEENwin_boundaryANDwin_boundary)win_boundarycan be:UNBOUNDED PRECEDINGvaluePRECEDINGUNBOUNDED FOLLOWINGvalueFOLLOWINGCURRENT ROW
傳回值
傳回值類型
LONG
。輸入參數
- input_field
- 必填。要執行匯總函數的欄位。您可以使用任何數值欄位或貨幣欄位。
- OVER()
- 必填。OVER必須在COUNT運算式。
- PARTITIONBYpartitioning_field
- 必填。使用PARTITION BY子句,指定一或多個欄位,用於對一組輸入列進行分區。您可以指定「貨幣」以外的任何欄位類型。例如,如果您將「月份」欄位指定為分區欄位,Workday 會將月份值相同的所有記錄分組歸入單一分區。
- ORDER BYordering_field
- 必填。使用ORDER BY子句,使用每個分區內的指定欄位值,指定如何排序分區中的輸入列。您可以指定「貨幣」以外的任何欄位類型。但是,當您使用RANGE子句。您可以使用DESC或ASC關鍵字︰依每個排序欄位的遞減順序 (高到低,NULL 在最後) 或遞增順序 (低到高,NULL 在前) 進行排序。如果您未為排序欄位指定排序順序,Workday 會自動按遞增順序對列進行排序。
- ROWS | 列範圍
- 必填。該ROWS和RANGE子句透過指定視窗框架來定義分區內的特定列數 (相對於目前列)。透過指定分區內的起點和結束點 (稱為視窗邊界),您可以定義視窗框架。「視窗框架」是每個分區中要計算匯總運算式 (此函數的計數) 的一組輸入列。視窗框架可以包含分區的一列、多列或所有列。兩者ROWS和RANGE指定相對於目前列的列範圍,但RANGE對值進行邏輯運算 (邏輯關聯),且ROWS對資料集中的列進行實際操作 (實際關聯)。RANGE將視窗框架限制為包含值在指定範圍內的列 (相對於目前的值)。ROWS會將視窗框架限制為包含實際與目前列相鄰的列。使用RANGE以定義絕對時段邊界,例如過去 3 個月或年初迄今。當您使用RANGE,ORDER BY子句必須使用數值欄位類型,例如整數或數值。範例︰假設您有一個名為 MonthNum 的整數欄位,表示一年中的月份編號 (值 1 到 12)。若要指定過去 3 個月的所有值,請依 MonthNum 進行排序,並使用RANGE BETWEEN 2 PRECEDING AND CURRENT ROW。此 RANGE 子句包含目前月份和前 2 個月,總計 3 個月。當您使用發布包含視窗函數的資料集時RANGE,視窗中的列數不可超過 1000。如果特定時段超過 1000 列,發布作業就會失敗。
- win_boundary
- 必填。視窗邊界定義了視窗框架的開始點和結束點。視窗邊界是以目前列為基準。APRECEDING子句定義的視窗邊界小於目前列 (目前列之前要包含的列數)。該FOLLOWING子句定義的視窗邊界大於目前列 (目前列之後包含的列數)。如果您只指定一個視窗邊界,Workday 會使用目前列做為視窗框架中的另一個邊界 (上限或下限,取決於運算式語法)。該UNBOUNDED關鍵字包含指定方向上的所有列。當您需要指定視窗框架的開始和結束位置時,請使用BETWEEN和AND關鍵字。指定特定列數時,該值不可超過 100。範例︰ROWS 2 PRECEDING表示視窗大小為 3 列,從前面的 2 列開始,直到 (包括目前) 列。範例︰ROWS UNBOUNDED FOLLOWING表示視窗從目前列開始,並包含目前列和目前列之後的所有列。
範例
您可以計算每位正職員工的移動銷售額計數 (連續計數或滾計計數)︰
COUNT([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS UNBOUNDED PRECEDING)
無論 ORDER BY 子句中的欄位為何,您都可以計算分區中每一列的總銷售額︰
COUNT([Sales]) OVER( PARTITION BY [Employee] ORDER BY [SalesDate] DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
您可以計算 12 個月的滾計計數︰
COUNT([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Month] RANGE 11 PRECEDING)
該
Month
「」欄位必須為數值欄位類型,例如「整數」或「數值」。您可以計算上年度迄今計數︰
COUNT([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Year] RANGE 1 PRECEDING)
該
Year
「」欄位必須為數值欄位類型,例如「整數」或「數值」。