位階
說明
RANK
是一個視窗匯總函數,用於為群組中的每一列指派排名數字。如果多列具有相同的排名值 (存在並列),Workday 會將相同的排名值指派給並列的列,並略過後續的排名位置。該
PARTITION BY
子句決定要使用哪些欄位來將一組輸入列分組。該
ORDER BY
子句決定在排名前如何排序分區中的列。Workday 會根據分區欄位將輸入列分組,根據排序欄位對列進行排序,然後計算每個群組中的匯總運算式 (此函數的排名)。各群組中的排名列從 1 開始。
語法
RANK()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
傳回值
傳回值類型
Integer
。輸入參數
- OVER()
- 必填。OVER必須在以下範圍內使用RANK運算式。
- PARTITIONBYpartitioning_field
- 必填。使用PARTITION BY子句,指定一或多個欄位,用於對一組輸入列進行分區。您可以指定「貨幣」以外的任何欄位類型。例如,如果您將「月份」欄位指定為分區欄位,Workday 會將「月份」值相同的所有記錄分組歸為單一分區。
- ORDER BYordering_field
- 必填。使用ORDER BY子句,使用每個分區內的指定欄位值,指定如何排序分區中的輸入列。您可以指定「貨幣」以外的任何欄位類型。您可以使用DESC或ASC關鍵字︰依每個排序欄位的遞減順序 (高到低,NULL 在最後) 或遞增順序 (低到高,NULL 在前) 進行排序。如果您未為排序欄位指定排序順序,Workday 會自動按遞增順序對列進行排序。
範例
範例︰您有一個包含以下列和欄位的資料集。
正職員工 | 銷售日期 | 銷售 |
|---|---|---|
Goh | 12/31/2018 | 140 |
Goh | 11/30/2018 | 60 |
Goh | 10/31/2018 | 140 |
弗里曼 | 12/31/2018 | 160 |
弗里曼 | 11/30/2018 | 60 |
弗里曼 | 10/31/2018 | 110 |
斯密 | 12/31/2018 | 140 |
斯密 | 11/30/2018 | 60 |
斯密 | 10/31/2018 | 120 |
您可以將每位正職員工的銷售額按遞減順序排列,因此最高銷售額的排名為 1。請在
「依正職員工排名銷售」
欄位中使用此運算式︰RANK() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
您會得到以下結果︰
正職員工 | 銷售日期 | 銷售 | 銷售排名 - 依正職員工 |
|---|---|---|---|
Goh | 12/31/2018 | 140 | 1 |
Goh | 10/31/2018 | 140 | 1 |
Goh | 11/30/2018 | 60 | 3 |
弗里曼 | 12/31/2018 | 160 | 1 |
弗里曼 | 10/31/2018 | 110 | 2 |
弗里曼 | 11/30/2018 | 60 | 3 |
斯密 | 12/31/2018 | 140 | 1 |
斯密 | 10/31/2018 | 120 | 2 |
斯密 | 11/30/2018 | 60 | 3 |
您也可以按降序排列每個日期的銷售額,因此最高銷售額的排名為 1。請在
「依日期排名銷售」
欄位中使用此運算式︰RANK() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
您會得到以下結果︰
正職員工 | 銷售日期 | 銷售 | 依日期對銷售額進行排名 |
|---|---|---|---|
弗里曼 | 12/31/2018 | 160 | 1 |
Goh | 12/31/2018 | 140 | 2 |
斯密 | 12/31/2018 | 140 | 2 |
Goh | 11/30/2018 | 60 | 1 |
弗里曼 | 11/30/2018 | 60 | 1 |
斯密 | 11/30/2018 | 60 | 1 |
Goh | 10/31/2018 | 140 | 1 |
斯密 | 10/31/2018 | 120 | 2 |
弗里曼 | 10/31/2018 | 110 | 3 |
請注意,並列值會被賦予相同的位階編號,且會略過下一個位階位置。