企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
聚合函数执行一个或多个值的计算并返回单个值。 聚合函数通常与[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计算标准方差")