聚合函數執行一個或多個值的計算并返回單個值。 聚合函數通常與[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`表進行演示。

**1\. AVG()函數示例**
以下語句使用`AVG()`函數返回`products`表中所有產品的平均價格:
~~~sql
SELECT
AVG(list_price) avg_product_price
FROM
production.products;
~~~
執行上面查詢語句,得到以下結果:

上圖中平均價格有`6`位小數。一般需要將結果舍入到兩位小數的數字。 為此,可以使用`ROUND`和`CAST`函數,如以下查詢中所示:
~~~sql
SELECT
CAST(ROUND(AVG(list_price),2) AS DEC(10,2))
avg_product_price
FROM
production.products;
~~~
執行上面查詢語句,得到以下結果:

首先,`ROUND`函數返回舍入的平均價格。 然后`CAST`函數將結果轉換為帶有兩個小數位的十進制數。
**2\. COUNT()函數示例**
以下語句使用`COUNT()`函數返回價格大于`500`的產品數量:
~~~sql
SELECT
COUNT(*) product_count
FROM
production.products
WHERE
list_price > 500;
~~~
執行上面查詢語句,得到以下結果:

在這個例子中:
* 首先,`WHERE`子句獲取價格大于`500`的產品。
* 其次,`COUNT`函數返回價格大于`500的`產品數量。
**3\. MAX()函數示例**
以下語句使用`MAX()`函數返回所有產品的最高定價:
~~~sql
SELECT
MAX(list_price) max_list_price
FROM
production.products;
~~~
執行上面查詢語句,得到以下結果:

**4\. MIN()函數示例**
同樣,以下語句使用`MIN()`函數返回所有產品的最低定價:
~~~sql
SELECT
MIN(list_price) min_list_price
FROM
production.products;
~~~
執行上面查詢語句,得到以下結果:

**5\. SUM()函數示例**
為了方便演示`SUM()`函數的使用,下面將使用[示例數據庫](https://www.yiibai.com/sqlserver/sql-server-sample-database.html "示例數據庫")中的`stocks`表。

以下語句使用`SUM()`函數計算所有倉庫中產品ID的總庫存:
~~~sql
SELECT
product_id,
SUM(quantity) stock_count
FROM
production.stocks
GROUP BY
product_id
ORDER BY
stock_count DESC;
~~~
執行上面查詢語句,得到以下結果:

以下是該語句的工作原理:
* 首先,`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 字符串函數