到现在为止介绍的函数都是一次只对单行进行操作,并且为每个输入行都返回一行输出结果。本节介绍聚合函数,聚合函数同时对一组行进行操作,对每组行返回一行输出结果。
注意:
由于聚合函数都是对成组的行进行操作,因此聚合函数也被称为分组函数(group function)。
表4-10列出了部分常用的聚合函数,这些函数全部返回一个NUMBER类型的值。
表4-10 聚 合 函 数
函 数
说 明
AVG(x)
返回 x 的平均值
COUNT(x)
返回一个包含x 的查询返回的行数
MAX(x)
返回 x 的最大值
MEDIAN(x)
返回 x 的中间值
MIN(x)
返回 x 的最小值
STDDEV(x)
返回 x 的标准差
SUM(x)
返回 x 的和
VARIANCE(x)
返回 x 的方差
在使用聚合函数时要注意以下几个问题:
● 聚合函数可用于任何有效的表达式。例如,可以对数字、字符串和日期使用COUNT、MAX和MIN函数。
● 聚合函数会忽略空值。这是因为空值说明该值未知,因此不适用于聚合函数的计算。
● DISTINCT关键字可以与聚合函数一起使用,这样可以在聚合函数的计算中排除重复项。
接下来的几节将会介绍更多有关表4-10中列出的聚合函数的知识。
第7章和第8章中将会介绍如何在SELECT语句的ROLLUP和RETURNING子句中使用这些函数。ROLLUP可以得到一组行的小计,这里的小计是用一个聚合函数计算得到的;RETURNING可以将聚合函数返回的值存储到一个变量中。
AVG函数
AVG(x)函数用于计算x的平均值。下面这个查询计算产品的平均价格;注意products表中的price列作为参数传递给了AVG函数:
SELECT AVG(price)FROM products;AVG(PRICE)----------19.7308333
聚合函数中可以使用任意有效的表达式。例如,下面这个查询向AVG函数传递的参数是表达式price + 2;意思是在每行的price列值上加上2,然后返回这些值的平均值:
SELECT AVG(price + 2)FROM products;AVG(PRICE)----------21.7308333
DISTINCT关键字可以用于从分组计算中排除重复的值。例如,下面这个查询在使用AVG函数计算平均值时,使用DISTICT关键字来排除price列中重复的值:
SELECT AVG(DISTINCT price)FROM products;AVG(DISTINCTPRICE)------------------20.2981818
注意这个例子中的平均值与本节第一个查询中所显示的平均值稍有不同。这是因为产品#12的价格与产品#7的价格相同,都是13.49。产品#12的price列被认为是重复的,AVG函数执行计算时,会将其排除在外。因此,本例所计算的平均值稍大一些。
注意:
由于聚合函数都是对成组的行进行操作,因此聚合函数也被称为分组函数(group function)。
表4-10列出了部分常用的聚合函数,这些函数全部返回一个NUMBER类型的值。
表4-10 聚 合 函 数
函 数
说 明
AVG(x)
返回 x 的平均值
COUNT(x)
返回一个包含x 的查询返回的行数
MAX(x)
返回 x 的最大值
MEDIAN(x)
返回 x 的中间值
MIN(x)
返回 x 的最小值
STDDEV(x)
返回 x 的标准差
SUM(x)
返回 x 的和
VARIANCE(x)
返回 x 的方差
在使用聚合函数时要注意以下几个问题:
● 聚合函数可用于任何有效的表达式。例如,可以对数字、字符串和日期使用COUNT、MAX和MIN函数。
● 聚合函数会忽略空值。这是因为空值说明该值未知,因此不适用于聚合函数的计算。
● DISTINCT关键字可以与聚合函数一起使用,这样可以在聚合函数的计算中排除重复项。
接下来的几节将会介绍更多有关表4-10中列出的聚合函数的知识。
第7章和第8章中将会介绍如何在SELECT语句的ROLLUP和RETURNING子句中使用这些函数。ROLLUP可以得到一组行的小计,这里的小计是用一个聚合函数计算得到的;RETURNING可以将聚合函数返回的值存储到一个变量中。
AVG函数
AVG(x)函数用于计算x的平均值。下面这个查询计算产品的平均价格;注意products表中的price列作为参数传递给了AVG函数:
SELECT AVG(price)FROM products;AVG(PRICE)----------19.7308333
聚合函数中可以使用任意有效的表达式。例如,下面这个查询向AVG函数传递的参数是表达式price + 2;意思是在每行的price列值上加上2,然后返回这些值的平均值:
SELECT AVG(price + 2)FROM products;AVG(PRICE)----------21.7308333
DISTINCT关键字可以用于从分组计算中排除重复的值。例如,下面这个查询在使用AVG函数计算平均值时,使用DISTICT关键字来排除price列中重复的值:
SELECT AVG(DISTINCT price)FROM products;AVG(DISTINCTPRICE)------------------20.2981818
注意这个例子中的平均值与本节第一个查询中所显示的平均值稍有不同。这是因为产品#12的价格与产品#7的价格相同,都是13.49。产品#12的price列被认为是重复的,AVG函数执行计算时,会将其排除在外。因此,本例所计算的平均值稍大一些。