文档库 最新最全的文档下载
当前位置:文档库 › 汇总与分组查询与单行子查询和多行子查询

汇总与分组查询与单行子查询和多行子查询

汇总与分组查询与单行子查询和多行子查询
汇总与分组查询与单行子查询和多行子查询

9.2.1 汇总数据

SQL提供了5个汇总函数用于在表的列上进行算术运算,这5个汇总函数是:Count、Sum、Avg、Max、Min。Count和Sum尽管在表面上比较相近,但其作用完全不同。Count 用于计算表中数据的行数,而Sum用于计算数值项相加的和。Avg用于计算表中一个字段的平均值,Max用于得到最大值,Min用于得到最小值,如表8.7所示。

表8.7 汇总函数列表

当使用汇总函数时,默认情况下,汇总信息包含所有的指定行。在某些情况下,结果集包含非惟一的行。可使用汇总函数的DISTINCT 选项筛选出非惟一的行。

任务9.12

问题描述:计算产品表中的行数。

解决方案:

SELECT Count(*)

FROM Products

分析与讨论:

汇总函数Count(*)计算表的行数,包括含有NULL值的行。

注意:除非和GROUP BY相连,在查询的项中,SELECT后面的汇总函数不能和字段名一起使用。如下面的代码是错误的:

SELECT ProductName ,Count(*) FROM Products

任务9.13

问题描述:统计订单数目。

解决方案:

SELECT Count( Distinct OrderID) AS 订单数目

FROM [Order Details]

分析与讨论:

汇总函数Count(OrderID)计算OrderID列的值的个数,OrderID列的NULL值不包含在内。

汇总函数Count( Distinct OrderID) 计算OrderID列的值的个数,OrderID列的NULL值不包含在内,如果多行OrderID值相同,则只取一行参入计数。

考虑下面两个查询语句的不同。

SELECT C ount(OrderID) AS 订单数目 FROM [Order Details]

SELECT Count( Distinct OrderID) AS 订单数目 FROM [Order Details]

第一个查询语句计算订单明细表中所有的订单数,包括重复的订单,第二个查询只计算

不同的订单。

任务9.14

问题描述:查询所有订单的销售额。

解决方案:

SELECT SUM(UnitPrice *Quantity *(1-Discount)) AS 销售额

FROM [Order Details]

分析与讨论:

以上查询使用汇总函数SUM对计算列UnitPrice *Quantity *(1-Discount)求和,求出所有订单的销售额。

9.2.2 分组查询

对于一个查询的输出结果,还可以基于指定的列对它们进行分组操作。通过使用GROUP BY关键字来对行依照指定列相同的值进行分组,这样就可以实现对每组记录进行计算,并将每一组记录合并或汇集为一个记录。像这样使用GROUP BY关键字的查询叫做分组查询,分组查询常和汇总函数一起使用。

1.按一列的值分组

按一列的值分组,就是对一列使用GROUP BY,这样列值相同的行归为一组,然后就可以在SELECT 子句