SQL必知必会 第九课 笔记——聚集函数

时间:2022-04-10 21:50:39
第9课 汇总数据
       这一课介绍什么是SQL的聚集函数,如何利用它们汇总表的数据。
9.1 聚集函数
       聚集函数(aggregate function): 对某些行运行的函数,计算并返回一个值。
       SQL给出了5个聚集函数,见表9-1。这些函数能进行上述检索。与前一章介绍的数据处理函数不同,SQL的聚集函数在各种主要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;