第9课 汇总数据
这一课介绍什么是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;
|