本文介绍什么是SQL的聚集函数以及如何利用它们汇总表的数据。
1、聚集函数
我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数, MySQL查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有以下几种。
- 确定表中行数(或者满足某个条件或包含某个特定值的行数)。
- 获得表中行组的和。
- 找出表列(或所有行或某些特定的行)的最大值、最小值和平均值
(1)AVG()函数
AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。 AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
下面的例子使用AVG()返回products表中所有产品的平均价格:
mysql> select avg(prod_price) as avg_price
-> from products;
AVG()也可以用来确定特定列或行的平均值。 下面的例子返回特定供应商所提供产品的平均价格:
mysql> select avg(prod_price) as avg_price
-> from products
-> where vend_id=1003;
(2)COUNT()函数
COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
COUNT()函数有两种使用方式。
- 使用COUNT(*)对表中行的数目进行计数, 不管表列中包含的是空值(NULL)还是非空值。
- 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
下面的例子返回customers表中客户的总数:
mysql> select count(*) as num_cust
-> from customers;
(3)MAX()函数
MAX()返回指定列中的最大值。 MAX()要求指定列名,如下所示:
mysql> select max(prod_price) as max_price
-> from products;
4、MIN()函数
MIN()的功能正好与MAX()功能相反,它返回指定列的最小值。与MAX()一样, MIN()要求指定列名,如下所示:
mysql> select min(prod_price) as min_price
-> from products;
5、SUM()函数
SUM()用来返回指定列值的和(总计)。
下面举一个例子, orderitems表包含订单中实际的物品,每个物品有相应的数量( quantity)。可如下检索所订购物品的总数(所有quantity值之和):
mysql> select sum(quantity) as item_ordered
-> from orderitems
-> where order_num=20005;
SUM()也可以用来合计计算值。在下面的例子中,合计每项物品的item_price*quantity,得出总的订单金额:
mysql> select sum(item_price * quantity) as total_price
-> from orderitems
-> where order_num=20005;
2、组合聚集函数
目前为止的所有聚集函数例子都只涉及单个函数。但实际上SELECT语句可根据需要包含多个聚集函数。请看下面的例子:
mysql> 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;
这里用单条SELECT语句执行了4个聚集计算,返回4个值( products表中物品的数目,产品价格的最高、最低以及平均值)。
Comments