文档介绍:第7讲复杂的数据检索
数据分组与汇总
多表联接查询
嵌套查询
上一章
返回目录
数据分组与汇总
GROUP BY 的基础知识
在结果集中生成汇总值
PUTE PUTE BY 子句
GROUP BY的基础知识
1. 使用 GROUP BY 子句
2. 联合使用 GROUP BY 子句和 HAVING 子句
1. 使用 GROUP BY 子句
联合使用聚合函数和 GROUP BY 子句,能够把表中的记录分组,并对组中数据进行汇总。
使用 GROUP BY 子句时,应注意
SQL Server 将为每一组计算一个汇总值,并把汇总值保存在一个字段中
对于指定的一组,SQL Server 只生成一条记录,不返回详细信息
SQL Server 只对满足 WHERE 子句的记录进行分组和汇总
不要对可包含空值的字段使用 GROUP BY 子句,因为空值也将被当作一组
USE northwind
SELECT productid, orderid ,quantity
FROM orderhistGO
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
GROUP BY productidGO
productid
total_quantity
1
15
2
35
3
45
productid
orderid
quantity
1
1
5
1
1
10
2
1
10
2
2
25
3
1
15
3
2
30
productid
total_quantity
2
35
只对满足 WHERE 子句的行分组
USE northwind
SELECT productid
,SUM(quantity) AS total_quantity
FROM orderhist
WHERE productid = 2
GROUP BY productidGO
示例 1
示例 2
2. 联合使用 GROUP BY 子句和 HAVING 子句
在分组的同时,对字段或表达式指定搜索条件
使用 HAVING 子句时,应注意
只在使用 GROUP BY 子句的同时,使用 HAVING 子句来限制分组
可以引用任何出现在选择列表中的字段
不要联合使用关键字 ALL 和 HAVING 子句。因为 HAVING 子句会忽略 ALL 关键字,并返回只符合 HAVING 条件的组
USE northwind
SELECT productid, orderid
,quantity
FROM orderhistGO
USE northwind
SELECT productid, SUM(quantity)
AS total_quantity
FROM orderhist
GROUP BY productid
HAVING SUM(quantity)>=30GO
productid
total_quantity
2
35
3
45
productid
orderid
quantity
1
1
5
1
1
10
2
1
10
2
2
25
3
1
15
3
2
30
示例
注意:
GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。
当 SELECT 语句中包含 GROUP BY 关键字时,在该选择列表中所允许的项目是:
分组列。
为分组列中的每个值只返回一个值的表达式
通用格式:
SELECT {columnA}[, …n],{ MAX(columnC)
AS MaxC}[,…n]
FROM tableX
GROUP BY {columnA}[,…n]
判断下列表达式是否合法:
SELECT ColumnA, ColumnB, SUM(ColumnC) AS SumC FROM TableX
GROUP BY ColumnA
SELECT ColumnA, ColumnB, SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA,ColumnB