第五章 聚合函数
Transact-SQL 编程语言提供三种函数:
1 聚合函数: 对一组值操作,但返回单一的汇总值。
2 行集函数: 可以像 SQL 语句中表引用一样使用。
3 标量函数:对单一值操作,返回单一值。
聚合函数对一组值执行计算并返回单一的值。除 COUNT 函数之外,聚合函数忽略空值。聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
常用的聚合函数有
SUM,AVG,MAX,MIN,COUNT等
==============================
一 求和函数 SUM
==============================
语法
SUM ( [ ALL | DISTINCT ] expression )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT【adj,清楚的,明显的】
指定 SUM 返回唯一值的和。
expression 是精确数字或近似数字数据类型分类(bit 数据类型除外)的表达式。不允许使用聚合函数和子查询。
返回类型
以最精确的 expression 数据类型返回所有表达式值的和。
说明
返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略。
示例1
USE pubs
GO
SELECT type, SUM(price), SUM(advance)
FROM titles
WHERE type LIKE '%cook'
GROUP BY type
ORDER BY type DESC
GO
注释:
WHERE 指定条件进行筛选
GROUP BY 分组结果集
ORDER BY 在指定字段中对查询的结果记录进行排序
示例2
USE pubs
GO
SELECT type, price, advance
FROM titles
WHERE type LIKE '%cook'
ORDER BY type
COMPUTE SUM(price), SUM(advance) BY type
注释:
COMPUTE 生成合计作为附加的汇总列出现在结果集的最后。
示例3
USE pubs
GO
SELECT type, SUM(price), SUM(advance)
FROM titles
GROUP BY type
ORDER BY type
GO
注释:
GROUP BY type 将type字段中的相同的记录的值组合成单一记录
ORDER BY type 将数据按type字段排序时的顺序显示出来
==============================
2 求平均值函数 AVG
==============================
语法
AVG ( [ ALL | DISTINCT ] expression )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT
省略选择字段中包含重复数据的记录。
expression
精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。
说明:
返回组中值的平均值。空值将被忽略。返回类型由表达式的运算结果类型决定。
示例4
USE pubs
SELECT AVG(advance), SUM(ytd_sales)
FROM titles
WHERE type = 'business'
示例5
USE pubs
SELECT AVG(DISTINCT price)
FROM titles
WHERE type = 'business'
示例6
USE pubs
SELECT SUM(advance)
FROM titles
WHERE type = 'business'
示例7
USE pubs
SELECT SUM(DISTINCT advance)
FROM titles
WHERE type = 'business'
==============================
3 求最大值函数 MAX
==============================
语法
MAX ( [ ALL | DISTINCT ] expression )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT
指定每个唯一值都被考虑。DISTINCT 对于 MAX 无意义,使用它仅仅是为了符合 SQL-92 兼容性。
expression
常量、列名、函数以及算术运算符、按位运算符和字符串运算符的任意组合。MAX 可用于数字列、字符列和 datetime 列,但不能用于 bit 列。不允许使用聚合函数和子查询。
返回类型与 expression 相同。
说明:
MAX返回表达式的最大值。MAX 忽略任何空值。
示例
下面的示例返回年度销售额最高的书。
USE pubs
GO
SELECT MAX(ytd_sales)
FROM titles
GO
==============================
4 求最小值函数 MIN
==============================
语法
MIN ( [ ALL | DISTINCT ] expression )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT
指定每个唯一值都被考虑。DISTINCT 对于 MIN 无意义,使用它仅仅是为了符合 SQL-92 兼容性。
expression
常量、列名、函数以及算术运算符、按位运算符和字符串运算符的任意组合。MIN 可用于数字列、char 列、varchar 列或 datetime列,但不能用于 bit 列。不允许使用聚合函数和子查询。
返回类型
返回类型与 expression 相同。
说明:
返回表达式的最小值。MIN 忽略任何空值。
示例6
下面的示例返回年度销售额最低的书。
USE pubs
GO
SELECT min(ytd_sales)
FROM titles
GO
==============================
5 求项目数量函数 COUNT
==============================
语法
COUNT ( { [ ALL | DISTINCT ] expression ] | * } )
参数
ALL
对所有的值进行聚合函数运算。ALL 是默认设置。
DISTINCT
指定 COUNT 返回唯一非空值的数量。
expression
一个表达式,其类型是除 uniqueidentifier、text、image 或 ntext 之外的任何类型。不允许使用聚合函数和子查询。
返回类型
int
说明:
指定应该计算所有行以返回表中行的总数。实际应用有下面三种格式
1
COUNT(*) 返回组中项目的数量,这些项目包括 NULL 值和副本。
2
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。
3
COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。
示例7
使用 COUNT 和 DISTINCT,查找作者所居住的不同城市的数量。
USE pubs
GO
SELECT COUNT(DISTINCT city)
FROM authors
GO
示例8
使用 COUNT(*),查找图书和书名的总数:
USE pubs
GO
SELECT COUNT(*)
FROM titles
GO
示例9
与其它聚合函数一起使用 COUNT(*),显示可以与选择列表中的其它聚合函数结合使用的 COUNT(*)。
USE pubs
GO
SELECT COUNT(*), AVG(price)
FROM titles
WHERE advance > $1000
GO