聚合函数执行一个或多个值的计算并返回单个值。 聚合函数通常与[SELECT]语句的[GROUP BY]子句和[HAVING]子句一起使用。
下表显示了SQL Server中的聚合函数:
| 编号 | 聚合函数 | 描述 |
| --- | --- | --- |
| 1 | AVG()函数 "AVG()函数" | `AVG()`函数用于计算集合中非`NULL`值的平均值。 |
| 2 | CHECKSUM\_AGG()函数] | `CHECKSUM_AGG()`函数根据一组行计算校验和值。 |
| 3 | COUNT()函数 | `COUNT()`函数返回集合中的行数,包括具有`NULL`值的行。 |
| 4 | COUNT\_BIG()函数 | `COUNT_BIG()`函数返回组中的行数(具有`BIGINT`数据类型),包括具有`NULL`值的行。 |
| 5 | [MAX()函数 | `MAX()`函数返回集合中非`NULL`值中的最大值。 |
| 6 | MIN()函数 | `MIN()`函数返回集合中非`NULL`值中的最小值。 |
| 7 | STDEV()函数 | `STDEV()`函数返回所提供表达式的所有值的统计标准偏差,但基于数据总体的样本。 |
| 8 | STDEVP()函数 | `STDEVP()`函数还返回所提供表达式的所有值的标准偏差,但基于整个数据填充。 |
| 9 | SUM()函数 | `SUM()`函数返回集合中所有非`NULL`值的总和。 |
| 10 | VAR()函数 | `VAR()`函数根据指定总体的样本,返回表达式中值的统计方差。 |
| 11 | VARP()函数 | `VARP()`函数返回表达式中值的统计方差,但是基于整个数据总体。 |
#### SQL Server聚合函数语法
以下是聚合函数的语法:
~~~sql
aggregate_function_name(DISTINCT | ALL expression)
~~~
在这个语法中;
* 首先,指定要使用的聚合函数的名称,例如:`AVG`,`SUM`和`MAX`。
* 其次,如果只想在计算中考虑不同的值,则使用`DISTINCT`;如果在计算中考虑所有值,则使用`ALL`。 默认情况下,如果未指定任何修饰符,则使用`ALL`。
* 第三,`expression`可以是表的列,也可以是由具有算术运算符的多个列组成的表达式。
#### SQL Server聚合函数示例
下面将使用[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")中的`products`表进行演示。
![products表结构](https://www.yiibai.com/uploads/article/2019/02/27/112340_36305.png "products表结构")
**1\. AVG()函数示例**
以下语句使用`AVG()`函数返回`products`表中所有产品的平均价格:
~~~sql
SELECT
AVG(list_price) avg_product_price
FROM
production.products;
~~~
执行上面查询语句,得到以下结果:
![查询平均价格](https://www.yiibai.com/uploads/article/2019/02/27/112540_53976.png "查询平均价格")
上图中平均价格有`6`位小数。一般需要将结果舍入到两位小数的数字。 为此,可以使用`ROUND`和`CAST`函数,如以下查询中所示:
~~~sql
SELECT
CAST(ROUND(AVG(list_price),2) AS DEC(10,2))
avg_product_price
FROM
production.products;
~~~
执行上面查询语句,得到以下结果:
![查询平均价格](https://www.yiibai.com/uploads/article/2019/02/27/112812_30090.png "查询平均价格")
首先,`ROUND`函数返回舍入的平均价格。 然后`CAST`函数将结果转换为带有两个小数位的十进制数。
**2\. COUNT()函数示例**
以下语句使用`COUNT()`函数返回价格大于`500`的产品数量:
~~~sql
SELECT
COUNT(*) product_count
FROM
production.products
WHERE
list_price > 500;
~~~
执行上面查询语句,得到以下结果:
![产品总数量](https://www.yiibai.com/uploads/article/2019/02/27/113014_42750.png "产品总数量")
在这个例子中:
* 首先,`WHERE`子句获取价格大于`500`的产品。
* 其次,`COUNT`函数返回价格大于`500的`产品数量。
**3\. MAX()函数示例**
以下语句使用`MAX()`函数返回所有产品的最高定价:
~~~sql
SELECT
MAX(list_price) max_list_price
FROM
production.products;
~~~
执行上面查询语句,得到以下结果:
![产品最高价格](https://www.yiibai.com/uploads/article/2019/02/27/113222_83111.png "产品最高价格")
**4\. MIN()函数示例**
同样,以下语句使用`MIN()`函数返回所有产品的最低定价:
~~~sql
SELECT
MIN(list_price) min_list_price
FROM
production.products;
~~~
执行上面查询语句,得到以下结果:
![产品最低价格](https://www.yiibai.com/uploads/article/2019/02/27/113346_15898.png "产品最低价格")
**5\. SUM()函数示例**
为了方便演示`SUM()`函数的使用,下面将使用[示例数据库](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例数据库")中的`stocks`表。
![socks表结构](https://www.yiibai.com/uploads/article/2019/02/27/113519_44390.png "stocks表结构")
以下语句使用`SUM()`函数计算所有仓库中产品ID的总库存:
~~~sql
SELECT
product_id,
SUM(quantity) stock_count
FROM
production.stocks
GROUP BY
product_id
ORDER BY
stock_count DESC;
~~~
执行上面查询语句,得到以下结果:
![](https://img.kancloud.cn/8a/c5/8ac52ef39c43a4f918d93f74344e93a2_573x520.png)
以下是该语句的工作原理:
* 首先,`GROUP BY`子句按产品ID将行汇总为组。
* 其次,`SUM()`函数计算每个组的数量总和。
**6\. STDEV()函数示例**
以下语句使用`STDEV()`函数计算所有价格的统计标准差:
~~~sql
SELECT
CAST(ROUND(STDEV(list_price),2) as DEC(10,2)) stdev_list_price
FROM
production.products;
~~~
执行上面查询语句,得到以下结果:
STEEV计算标准方差("STEEV计算标准方差")
- 第三章-数据库
- 3.1 SQL Server简介及安装
- 3.2 SQL Server示例数据库
- 3.3 SQL Server 加载示例
- 3.3 SQL Server 中的数据类型
- 3.4 SQL Server 数据定义语言DDL
- 3.5 SQL Server 修改数据
- 3.6 SQL Server 查询数据
- 3.7 SQL Server 连表
- 3.8 SQL Server 数据分组
- 3.9 SQL Server 子查询
- 3.10.1 SQL Server 集合操作符
- 3.10.2 SQL Server聚合函数
- 3.10.3 SQL Server 日期函数
- 3.10.4 SQL Server 字符串函数