SQL Server中聚合函数的用法


本文整理自网络,侵删。

?聚合函数对一组值执行计算,并返回单个值。

除了 COUNT 外,聚合函数都会忽略 Null 值。 聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。

OVER 子句可以跟在除 STRING_AGG、GROUPING 或 GROUPING_ID 函数以外的所有聚合函数后面。

只能在以下位置将聚合函数作为表达式使用:

  • SELECT 语句的选择列表(子查询或外部查询)。
  • HAVING 子句。

T-SQL提供的聚合函数一共有13个之多。

1、avg:平均值

avg( [ all | distinct ] expression )

AVG函数用于计算精确型或近似型数据类型的平均值,bit类型除外,忽略null值。AVG函数计算时将计算一组数的总和,然后除以为null的个数,得到平均值

select avg(distinct age) from person    -- 查询person表里的年龄的平均值,相同值只计算一次

2、min:最小值

MIN函数用于计算最小值,MIN函数可以适用于numeric、char、varchar或datetime、money或smallmoney列,但不能用于bit列。不允许使用聚合函数和子查询,忽略null值。

3、max:最大值

MAX函数用于计算最大值,忽略null值。max函数可以使用于numeric、char、varchar、money、smallmoney、或datetime列,但不能用于bit列。不允许使用聚合函数和子查询。

4、sum:求和值

SUM函数用于求和,只能用于精确或近似数字类型列(bit类型除外),忽略null值,不允许使用聚合函数和子查询。

5、count:统计项数值

count函数用于计算满足条件的数据项数,返回int数据类型的值。这里的表达式是除text、image或ntext以外任何数据类型的表达式。但不允许使用聚合函数和子查询。

  • count(*) : 返回所有的项数,包括null值和重复项。而除了count(*)外,其他任何形式的count()函数都会忽略Null行。
  • count(all 表达式):返回非空的项数。
  • count(distinct 表达式):返回唯一非空的项数

注意:count(字段名),如果字段名为NULL,则count函数不会统计。例如count(name),如果name为空,则不会统计到结果

select count(distinct age) from person    -- 查询person表里的年龄唯一且非空的项数

6、count_big:统计项数量

返回组中的项数。 COUNT_BIG 的用法与 COUNT 函数类似。 两个函数唯一的差别是它们的返回值。 COUNT_BIG 始终返回 bigint 数据类型值。 COUNT 始终返回 int 数据类型值。

7、差值函数

1、stdev:计算标准偏差值  

这里的expression必须是一个数值表达式,不允许使用聚合函数和子查询。表达式的值是精确或近似数值类型,但不包括bit数据类型。将忽略null值。

2、stdevp:计算总体标准偏差

返回指定表达式中所有值的总体标准偏差。

3、var:计算方差

VAR函数用于计算指定表达式中所有值的方差。 这里的expression表达式必须是一个数值表达式,不允许使用聚合函数和子查询。表达式的值是精确或近似数值类型,但不包括bit数据类型,将忽略null值。

4、varp:计算总体统计方差

返回指定表达式中所有值的总体统计方差。

8、checksum_agg:计算组中各值的校验和

返回组中各值的校验和。 将忽略 Null 值。CHECKSUM_AGG 可用于检测表中的更改。表中行的顺序不影响 CHECKSUM_AGG 的结果。此外,CHECKSUM_AGG 函数还可与 DISTINCT 关键字和 GROUP BY 子句一起使用。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但只在极少数情况下,校验值会保持不变。

CHECKSUM_AGG ( [ ALL | DISTINCT ] expression )

参数说明: 

  • ALL:对所有的值进行聚合函数运算。 ALL 为默认值。
  • DISTINCT :指定 CHECKSUM_AGG 返回唯一校验值。
  • expression :一个整数表达式。 不允许使用聚合函数和子查询。
SELECT CHECKSUM_AGG(Account_Age) FROM Account
GO
UPDATE Account SET Account_Age = 30 WHERE Account_Id = 6
GO
SELECT CHECKSUM_AGG(Account_Age) FROM Account

显示结果如下:

可见随着表的更改,该系统函数返回的值也变了。此函数的作用正在于此,检测表的更改。

9、string_agg:串联字符串

MS SQL Server的2017新增了STRING_AGG()是一个聚合函数,它将由指定的分隔符分隔将字符串行连接成一个字符串。 它不会在结果字符串的末尾添加分隔符。

以下是STRING_AGG()函数的语法:

STRING_AGG ( input_string, separator ) [ order_clause ]

在这个语法中:

  • input_string是串联时可以转换为VARCHARNVARCHAR的类型。
  • separator是结果字符串的分隔符。它可以是文字或变量。
  • order_clause使用WITHIN GROUP子句指定连接结果的排序顺序:
WITHIN GROUP ( ORDER BY expression [ ASC | DESC ] )

STRING_AGG()忽略NULL,并且在执行连接时不会为NULL添加分隔符。

下面将使用示例数据库中的sales.customers表进行演示:

阅读剩余部分

相关阅读 >>

sql为什么会出现无效的列索引

sql server中的left、right函数

sql注入语句是什么

深入了解sql注入和预防措施

图文详解mysql中如何查看sql语句的执行时间

sqlserver sql性能优化技巧

sqlite教程(三):数据表和视图简介

sql联合查询inner join、outer join和cross join的区别详解

java分页拦截类实现sql自动分页

mysql数据库21条最佳性能优化经验

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...