RANK
描述
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表达式。
- PARTITION BY分区字段
- 必修内容。使用PARTITION BY子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
- ORDER BYordering_field
- 必修内容。使用ORDER BY子句,以指定如何使用每个分区内指定字段中的值对分区中的输入行进行排序。您可以指定除币种以外的任何字段类型。您可以使用DESC或ASC关键字,为每个排序字段按降序(从高到低的值,空值在最后)或升序(从低到高的值,空值在前)排序。如果您没有为排序字段指定排序顺序,Workday 会自动按升序对行进行排序。
示例
示例:您的数据集包含以下行和字段。
员工 | 销售日期 | Sales |
|---|---|---|
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 |
Smith | 12/31/2018 | 140 |
Smith | 11/30/2018 | 60 |
Smith | 10/31/2018 | 120 |
您可以按降序对每个员工的销售额进行排名,因此销售额最高的员工将获得排名 1。在
“销售排名(按员工)”
字段中使用以下表达式:RANK() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
您将得到以下结果:
员工 | 销售日期 | Sales | 销售排名(按员工) |
|---|---|---|---|
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 |
Smith | 12/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
Smith | 11/30/2018 | 60 | 3 |
您还可以按降序对每个日期的销售额进行排名,因此最高销售额的销售额将被赋予排名 1。在
“销售排名(按日期)”
字段中使用以下表达式:RANK() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
您将得到以下结果:
员工 | 销售日期 | Sales | 销售额排名(按日期) |
|---|---|---|---|
费里曼 | 12/31/2018 | 160 | 1 |
Goh | 12/31/2018 | 140 | 2 |
Smith | 12/31/2018 | 140 | 2 |
Goh | 11/30/2018 | 60 | 1 |
费里曼 | 11/30/2018 | 60 | 1 |
Smith | 11/30/2018 | 60 | 1 |
Goh | 10/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
费里曼 | 10/31/2018 | 110 | 3 |
请注意,并列值会被赋予相同的等级编号,并且下一等级位置会被跳过。