SUM
描述
SUM
是一个窗口聚合函数,它对行进行分组,按字段对行进行排序,并返回组中所有值的总计.您可以使用 SUM
以计算累计总计。该
PARTITION BY
子句确定使用哪些字段对一组输入行进行分组。该 ORDER BY
子句决定如何对分区中的行进行排序。Workday 会根据分区字段将输入行分组,根据排序字段对行进行排序,然后计算每个组中的聚合表达式(此函数的总和)。
语法
whereSUM(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
返回值
返回类型为
NUMERIC
, LONG
,或 DOUBLE
,具体取决于 input_field
的类型。输入参数
- input_field
- 必修内容。要执行聚合函数操作的字段。您可以使用任何数值字段或币种字段。
- OVER()
- 必填。OVER必须在一个SUM表达式。
- PARTITION BY分区字段
- 必修内容。使用PARTITION BY子句,可指定一个或多个字段,用于对一组输入行进行分区。您可以指定除币种以外的任何字段类型。示例:您将“月”字段指定为分区字段,以便 Workday 将具有相同“月”值的所有记录分组到一个分区中。
- ORDER BYordering_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
- 必修内容。窗口边界定义了窗口框架的起点和终点。窗口边界是相对于当前行的。APRECEDING子句定义的窗口边界小于当前行(当前行之前要包括的行数)。该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)
“年”
字段必须为数值字段类型,例如整数或数值。