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

SUM

描述

SUM
是一个窗口聚合函数,它对行进行分组,按字段对行进行排序,并返回组中所有值的总计.您可以使用
SUM
以计算累计总计。
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。该
ORDER BY
子句决定如何对分区中的行进行排序。
Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的总和)。

语法

SUM
(
input_field
)
OVER
(
PARTITION BY
partitioning_field
[,
partitioning_field
]
ORDER BY
ordering_field
[ASC | DESC] [,
ordering_field
[ASC | DESC]]
RANGE
BETWEEN
value
PRECEDING
AND
CURRENT ROW
|
ROWS
win_boundary
|
BETWEEN
win_boundary
AND
win_boundary
)
where
win_boundary
can be:
UNBOUNDED PRECEDING
value
PRECEDING
UNBOUNDED FOLLOWING
value
FOLLOWING
CURRENT ROW

返回值

返回类型为
NUMERIC
LONG
,或
DOUBLE
,具体取决于
input_field
的类型。

输入参数

input_field
必修内容。要执行聚合函数操作的字段。您可以使用任何数值字段或币种字段。
OVER()
必填。
OVER
必须在一个
SUM
表达式。
PARTITION BY
分区字段
必修内容。使用
PARTITION BY
子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
ORDER BY
ordering_field
必修内容。使用
ORDER BY
子句,以指定如何使用每个分区内指定字段中的值对分区中的输入行进行排序。您可以指定除币种以外的任何字段类型。但是,当您使用
RANGE
子句
您可以使用
DESC
ASC
关键字,为每个排序字段按降序(从高到低的值,空值在最后)或升序(从低到高的值,空值在前)排序。如果您没有为排序字段指定排序顺序,Workday 会自动按升序对行进行排序。
第 行 | 行范围
必修内容。该
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
必修内容。窗口边界定义了窗口框架的起点和终点。窗口边界是相对于当前行的。
A
PRECEDING
子句定义的窗口边界小于当前行(当前行之前要包括的行数)。该
FOLLOWING
子句定义的窗口边界应大于当前行(当前行之后要包括的行数)。
如果您仅指定一个窗口边界,Workday 会将当前行用作窗口框架中的另一个边界(上限或下限,具体取决于表达式语法)。该
UNBOUNDED
关键字包括指定方向上的所有行。如果您需要指定窗口框架的开始日期和结束日期,请使用
BETWEEN
AND
关键字
指定特定行数时,该
必须小于或等于 100。
示例:
ROWS 2 PRECEDING
表示窗口大小为 3 行,从当前行之前的 2 行开始,包括当前行。
示例:
ROWS UNBOUNDED FOLLOWING
表示窗口从当前行开始,并包括当前行和当前行之后的所有行。

示例

您可以计算每个员工的销售额累计(滚动总和或移动总和):
SUM([Sales]) OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC ROWS UNBOUNDED PRECEDING)
无论 ORDER BY 子句中包含哪些字段,您都可以计算分区中每一行的总和(总销售额):
SUM([Sales]) OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
您可以计算 12 个月滚动期间的总和:
SUM([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Month] RANGE 11 PRECEDING)
“月”
字段必须为数值字段类型,例如整数或数值。
您可以通过以下方式计算自年初到当前的总和:
SUM([fieldA]) OVER( PARTITION BY [fieldB] ORDER BY [Year] RANGE 1 PRECEDING)
“年”
字段必须为数值字段类型,例如整数或数值。