您的位置  > 互联网

聚合函数快速实现数据的聚合分析(第7章)

聚合分析

在访问数据库时,常常需要对表中的某一列数据进行统计分析,比如求其最大值、最小值、平均值等。这些分析都是针对一个或多个表中的一列或多列数据进行的。表称为聚合分析。

在SQL中,可以使用聚合函数来快速实现数据的聚合分析。 与第7章介绍的SQL中的函数不同,聚合函数处理列中的一系列数据并返回单个统计值; 而前一个函数处理列中的单个数据。

聚合函数

和()

返回所选结果集中所有值的总和

最大限度()

返回所选结果集中所有值的最大值

最小值()

返回所选结果集中所有值的最小值

平均值()

返回所选结果集中所有值的平均值

数数()

返回所选结果集中的行数

和()

SUM(SAL) AS FROM WHERE TSEX='Male'

对一列数据求和时,如果该列中存在 NULL 值,SUM 函数将忽略该值。 (加上所有还对每列求和)

数数()

您必须指定列名或使用星号,这意味着计算表中的所有记录。 两种使用形式如下。

* COUNT(*),计算表中的总行数,即使表中行中的数据为NULL,也包括在内。

* COUNT(),计算列中包含的行数。 如果该列中某行的数据为NULL,则该行不计入统计总计。

注意

COUNT(*) 函数会准确返回表中的总行数,而 COUNT() 函数只有在 COUNT() 函数的参数列不包含 NULL 值时才会返回表中正确的行数,因此只有当列受 NOT NULL 作为参数限制时,才可以使用 COUNT() 函数来代替 COUNT(*) 函数。

计数(TNO) AS 、计数(TNAME) AS 、计数(SAL) AS

使用 COUNT( ) 函数对多列中的数据进行计数

如果要统计多列,需要通过连接器连接多列待统计的列,并将其作为COUNT()函数的参数。

(还没有例子,稍后我会补充)

最大值/最小值函数—MAX()/MIN()

列中的数据可以是数字、字符串或日期时间数据类型。 MAX()/MIN() 函数将返回与传递的列数据类型相同的单个值

这是一个典型的例子。

MAX (AGE) AS FROM(取最年长的老师)

但通常拿出来后,你需要看到老师的基本信息,比如姓名、性别、从业年限等。

但是SQL不支持下面的语句

TNAME、DNAME、TSEX、最大(年龄)来自

那么我们应该做什么呢?

TNAME、DNAME、TSEX、SAL、年龄来自

WHERE AGE=MAX (AGE) 就可以了

当列类型为字符串或日期时

均值函数——AVG()

AVG() 函数实际上是将列中的值相加,然后将总和除以非 NULL 值的数量。 因此,与SUM()函数一样,AVG()函数只能对数值数据进行操作,即列中的数据必须是数值。

平均 () 来自

当你想显示其他信息时,比如姓名、年龄等,方法如下

* 从

其中年龄 >=(平均(年龄)来自)

按年龄订购

用于聚合分析的重值处理

5种聚合函数可以应用于所选列中的所有数据(无论该列中的数据是否已重置),或者只能处理该列中的非重复值,即只取重复一次的值用于聚合分析。 当然,对于MAX()/MIN()函数来说,重值处理意义不大。

您可以使用 ALL 关键字指定应处理所选列中的所有数据,并使用 ALL 关键字指定应处理所选列中的非重复数据。 以AVG()函数为例,语法如下。

平均值([全部/])

与聚合函数密不可分的就是分组。

GROUP BY 子句创建组

, 总和()

从表

通过...分组

说明:GROUP BY 子句根据列中的数据对行进行分组,即将具有相同值的行分组在一起。 一般与聚合函数一起使用。 当然,这里的SUM()函数也可以是其他聚合函数。 所有组合列(GROUP BY 子句中列出的列)必须来自 FROM 子句中列出的表。 不能根据实际值、聚合函数结果或其他表达式计算的值对行进行分组。

GROUP BY 子句根据多列组合行

DNAME、TSEX、COUNT(*) AS

按 DNAME、TSEX 分组

运算符和CUBE运算符主要用于扩展,暂时不写。 它们将在稍后添加。

条款

GROUP BY 子句只是对所选列中的数据进行分组,并对该列中具有相同值的行进行分组。 在实际应用中,经常需要删除不满足条件的行组。 为了实现这个功能,SQL提供了子句。 语法如下。

, 总和()

从表

通过...分组

SUM() 值

注意:通常与 GROUP BY 子句一起使用。 当然,语法中的SUM()函数也可以是任何其他聚合函数。 DBMS 将子句中的搜索条件应用于 GROUP BY 子句生成的行组。 如果行组不满足搜索条件,则会从结果表中删除。

子句和 WHERE 子句

子句与 WHERE 子句类似,也定义搜索条件。 但与 WHERE 子句不同的是,该子句与组相关,而不是与各个行相关。

* 如果指定了 GROUP BY 子句,则该子句定义的搜索条件将应用于由该 GROUP BY 子句创建的组。

* 如果指定 WHERE 子句而不指定 GROUP BY 子句,则子句中定义的搜索条件将作用于 WHERE 子句的输出,并将该输出视为一个组。

* 如果既没有指定 GROUP BY 子句,也没有指定 WHERE 子句,则该子句定义的搜索条件将作用于 FROM 子句的输出,并将该输出视为一个组。

1.

DNAME,计数(TSEX)为

WHERE TSEX='女性'

按 DNAME 分组

2.

DNAME,计数(TSEX)为

按 DNAME 分组

TSEX='女性'