写点什么

YashanDB SUM 函数

作者:YashanDB
  • 2025-08-04
    广东
  • 本文字数:2449 字

    阅读完需:约 8 分钟

SUM

语法图


SUM 函数计算给定参数expr的数值和,其返回值类型如下:

当参数为其他类型且无法转换为上述类型时,不执行计算并返回类型转换错误或是类型不支持。

在单行计算中,当 expr 的值为 NULL 时,函数返回 NULL。

在多行计算中,函数将忽略 expr 值为空的行,当所有行均为空时,计算结果为 NULL。

聚集函数不可嵌套,因此 expr 为除聚集函数之外的其他通用表达式,其类型只能是数值型、字符型。

DISTINCT

表示在计算数值和时,过滤掉重复的行。

ALL

默认值,表示对所有行计算数值和。

示例

-- branches1表中包含了区域信息、各区员工数量等  -- 分区域计算员工总数量,对01、04区域对应员工数量为空的行在计算时被忽略,对02区域对应员工数量只有一行且值为空,此时计算返回NULL结果SELECT area_no,SUM(employee_count) sum FROM branches1 GROUP BY area_no;AREA_NO                 SUM------- -------------------                         7001                       7004                       4002                       05                       40  -- 分区域计算一个常量的数值和SELECT area_no,SUM(10) sum FROM branches1 GROUP BY area_no;AREA_NO         SUM------- -----------                 2001               4004               4002               1005               10
复制代码

OVER

当指定 OVER 关键字时,SUM 将作为窗口函数,并支持滑动窗口,返回多行的数值和。

analytic_clause

窗口函数通用语法。

示例

-- finance_info表记录了分年、月、机构的收入情况SELECT year,month,branch,revenue_total FROM finance_info;YEAR  MONTH BRANCH REVENUE_TOTAL ----- ----- ------ ------------- 2001  01    0201            28882021  01    0201           288882021  01    0101           388882021  02    0101           37778
SELECT year,month,revenue_total curr,SUM(revenue_total) OVER (PARTITION BY year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) tonowFROM finance_info;YEAR MONTH CURR TONOW ----- ----- ----------- ----------- 2001 01 2888 28882021 01 28888 288882021 01 38888 677762021 02 37778 105554
-- 分年统计每月所有机构的收入和,及年初至今所有机构的收入和SELECT year,month,SUM(revenue_total) curr,SUM(SUM(revenue_total)) OVER (PARTITION BY year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) tonowFROM finance_infoGROUP BY year,month;YEAR MONTH CURR TONOW ----- ----- ----------- ----------- 2001 01 2888 28882021 01 67776 677762021 02 37778 105554
复制代码

代码

sum::= SUM "(" [DISTINCT|ALL] expr ")" [OVER "(" analytic_clause ")"]
analytic_clause::= "(" [query_partition_clause] [order_by_clause [windowing_clause]] ")"
复制代码

SUM 函数计算给定参数expr的数值和,其返回值类型如下:

当参数为其他类型且无法转换为上述类型时,不执行计算并返回类型转换错误或是类型不支持。

在单行计算中,当 expr 的值为 NULL 时,函数返回 NULL。

在多行计算中,函数将忽略 expr 值为空的行,当所有行均为空时,计算结果为 NULL。

聚集函数不可嵌套,因此 expr 为除聚集函数之外的其他通用表达式,其类型只能是数值型、字符型。

DISTINCT

表示在计算数值和时,过滤掉重复的行。

ALL

默认值,表示对所有行计算数值和。

示例

-- branches1表中包含了区域信息、各区员工数量等  -- 分区域计算员工总数量,对01、04区域对应员工数量为空的行在计算时被忽略,对02区域对应员工数量只有一行且值为空,此时计算返回NULL结果SELECT area_no,SUM(employee_count) sum FROM branches1 GROUP BY area_no;AREA_NO                 SUM------- -------------------                         7001                       7004                       4002                       05                       40  -- 分区域计算一个常量的数值和SELECT area_no,SUM(10) sum FROM branches1 GROUP BY area_no;AREA_NO         SUM------- -----------                 2001               4004               4002               1005               10
复制代码

OVER

当指定 OVER 关键字时,SUM 将作为窗口函数,并支持滑动窗口,返回多行的数值和。

analytic_clause

窗口函数通用语法。

示例

-- finance_info表记录了分年、月、机构的收入情况SELECT year,month,branch,revenue_total FROM finance_info;YEAR  MONTH BRANCH REVENUE_TOTAL ----- ----- ------ ------------- 2001  01    0201            28882021  01    0201           288882021  01    0101           388882021  02    0101           37778
SELECT year,month,revenue_total curr,SUM(revenue_total) OVER (PARTITION BY year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) tonowFROM finance_info;YEAR MONTH CURR TONOW ----- ----- ----------- ----------- 2001 01 2888 28882021 01 28888 288882021 01 38888 677762021 02 37778 105554
-- 分年统计每月所有机构的收入和,及年初至今所有机构的收入和SELECT year,month,SUM(revenue_total) curr,SUM(SUM(revenue_total)) OVER (PARTITION BY year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) tonowFROM finance_infoGROUP BY year,month;YEAR MONTH CURR TONOW ----- ----- ----------- ----------- 2001 01 2888 28882021 01 67776 677762021 02 37778 105554
复制代码


用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB SUM函数_数据库 大数据_YashanDB_InfoQ写作社区