SQL聚合函数 SUM

2022-03-27 16:31:08 浏览数 (2)

SQL聚合函数 SUM

返回指定列值之和的聚合函数。

大纲

代码语言:javascript复制
SUM([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [�TERHAVING])

参数

  • ALL - 可选-指定SUM返回表达式中所有值的和。 如果没有指定关键字,这是默认值。
  • DISTINCT - 可选-一个DISTINCT子句,指定SUM返回表达式中不同(唯一)值的和。 DISTINCT可以指定BY(colo -list)子句,其中colo -list可以是单个字段,也可以是用逗号分隔的字段列表。
  • expression - 任何有效的表达式。 通常是包含要求和的数据值的列的名称。
  • %FOREACH(col-list) - 可选-列名或以逗号分隔的列名列表。
  • �TERHAVING - 可选-应用在HAVING子句中的条件。

SUM返回与expression相同的数据类型,但有如下异常:TINYINTSMALLINTINTEGER返回的数据类型都是INTEGER

注意:SUM可以指定为聚合函数,也可以指定为窗口函数。 本参考页面描述了SUM作为聚合函数的使用。 SUM作为一个窗口函数在窗口函数概述中描述。

描述

SUM聚合函数返回表达式值的和。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。

SUM可以在引用表或视图的SELECT查询或子查询中使用。 SUM可以在SELECT列表或HAVING子句中与普通字段值一起出现。

SUM不能在WHERE子句中使用。 SUM不能在JOINON子句中使用,除非SELECT是子查询。

和所有聚合函数一样,SUM可以接受一个可选的DISTINCT子句。 SUM(DISTINCT col1)只汇总那些不同(唯一)的col1字段值。 SUM(DISTINCT BY(col2) col1)只汇总col2值不同(唯一)的记录中的col1字段值。 但是请注意,不同的col2值可能包含一个单独的NULL值。

数据值

对于数据类型为INTSMALLINTTINYINT的表达式,SUM返回的数据类型为INTEGER。 对于数据类型为BIGINT的表达式,SUM返回数据类型BIGINT。 对于数据类型为DOUBLE的表达式,SUM返回数据类型为DOUBLE的表达式。 对于所有其他数字数据类型,SUM返回数据类型numeric

SUM返回精度为18的值。 返回值的尺度与表达式的尺度相同,但有以下例外。 如果expression是一个数据类型为VARCHARVARBINARY的数值,则返回值的尺度为8。

默认情况下,聚合函数使用逻辑(内部)数据值,而不是显示值。

SUM通常应用于具有数值的字段或表达式。 因为只执行最小的类型检查,所以有可能(尽管很少有意义)对非数字字段调用它。 SUM计算包括空字符串(")在内的非数值值为0(0)。如果expression是数据类型VARCHAR,则返回到ODBC或JDBC的值是数据类型DOUBLE

在派生SUM聚合函数值时,数据字段中的NULL值将被忽略。 如果查询没有返回任何行,或者返回的所有行的数据字段值为NULL, SUM返回NULL

优化

SUM计算的SQL优化可以使用一个位片索引,如果这个索引是为字段定义的。

当前事务期间所做的更改

与所有聚合函数一样,SUM总是返回数据的当前状态,包括未提交的更改,而不考虑当前事务的隔离级别。

示例

在下面的例子中,美元符号($)连接到薪金数额。

下面的查询返回示例中所有员工的工资之和。 雇员数据库:

代码语言:javascript复制
SELECT '$' || SUM(Salary) AS Total_Payroll
     FROM Sample.Employee

下面的查询使用 �TERHAVING必须返回所有工资的总和和每个州超过$80,000的工资的总和,其中至少有一个人的工资为> $80,000:

代码语言:javascript复制
SELECT Home_State,
       '$' || SUM(Salary) AS Total_Payroll,
       '$' || SUM(Salary �TERHAVING) AS Exec_Payroll
     FROM Sample.Employee
     GROUP BY Home_State
     HAVING Salary > 80000
     ORDER BY Home_State

0 人点赞