跳至主要内容
Workday User Guide
上次更新时间 :2023-06-23
RANK

RANK

描述

RANK
是一个窗口聚合函数,用于为组中的每一行指定排名数字.如果多行具有相同的排名值(存在并列关系),则 Workday 会为并列行指定相同的排名值,并跳过后续的排名位置。
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。
ORDER BY
子句决定了在对分区中的行进行排名之前,如何对其进行排序。
Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的排名)。每组中已排名的行从 1 开始。

语法

RANK
()
OVER
(
PARTITION BY
partitioning_field
[,
partitioning_field
]
ORDER BY
ordering_field
[ASC | DESC] [,
ordering_field
[ASC | DESC]] )

返回值

返回类型为
Integer

输入参数

OVER()
必填。
OVER
必须在 内使用
RANK
表达式。
PARTITION BY
分区字段
必修内容。使用
PARTITION BY
子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
ORDER BY
ordering_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
请注意,并列值会被赋予相同的等级编号,并且下一等级位置会被跳过。