介绍一下什么是SQL的聚集函数?如何利用它们汇总表的数据?
介绍一下什么是sql的聚集函数?如何利用它们汇总表的数据?
9.1 聚集函数
聚集函数(aggregate function): 对某些行运行的函数,计算并返回一个值。
sql给出了5个聚集函数,见表9-1。这些函数能进行上述检索。与前一章介绍的数据处理函数不同,sql的聚集函数在各种主要sql实现中得到了相当一致的支持。
表9-1 sql聚集函数
avg()函数:计算平均数。eg.select avg(prod_price) as avg_price. 同时,还可以计算特定行或列的平均值。 eg.select avg(prod_price) as avg_price from products where vend_id='d12';
警告:只用于单个列
avg()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg()函数.
说明:null值
avg()函数忽略列值为null的行。
count函数:
count()函数有两种使用方式:
1)使用count(*)对表中行的数目进行计数,不管表列中包含的是空值(null)还是非空值。
2)使用count(column)对特定列中具有值的行进行计数,忽略null值。
select count(*) as num_cust
from customers; (返回顾客总数)
select count(cust_email) as num_cust
from customers; (只对具有电子邮件地址的客户计数)
max() & min()函数:
与max()一样,min()要求指定列名。eg.select min(prod_price) as min_price from products;
提示:在多个列上进行计算
利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算,例如下例sum()函数:
select sum(item_price*quantity) as total_price
from orderitems
where ordernum 20005;
9.2 聚集不同值
下面的例子使用avg()函数返回特定供应商提供的产品的平均价格。它与上面的select语句相同,但使用了distinct参数,因此平均值只考虑各个不同的价格:
select avg(distinct prod_price) as avg_price
from products
where vend_id = 'dll01';
警告:distinct不能用于count(*)
如果指定列名,则distinct只能用于count()。distinct不能用于count(*)。类似地,distinct必须使用列名,不能用于计算或表达式
9.3 组合聚集函数
实际上,select语句可根据需要包含多个聚集函数。
select count(*) as num_items,
min(prod_price) as price_min,
max(prod_price) as price_max,
avg(prod_price) as price_avg
from products;