聚合函数用于汇总表的数据,比如求和、计数、求某列的平均值等等。SQL 中一共包含了 5 个聚合函数,这些聚合函数与上一篇我们提到的文本处理函数、日期时间函数不同,SQL 聚合函数在主要的 DBMS 中具有相当一致的支持。
下面,我们依次来学习这 5 个 SQL 聚合函数吧~
AVG 函数
函数 AVG() 用来返回所有列的平均值,也可以用来返回特定列或行的平均值。如下 SQL 返回商品表中所有产品的平均价格,其中商品表如下:
查询所有商品的平均价格:
SELECT
AVG( prod_price ) AS avg_price
FROM
Products;
商品价格的聚合结果:
此外,AVG 结合 WHERE 子句也可以返回特定行的平均值。以下 SQL 返回供应商 DLL01 所提供的产品的平均价格。
SELECT
AVG( prod_price ) AS avg_price
FROM
Products
WHERE
vend_id = 'DLL01';
聚合结果:
注:AVG 计算均值时,忽略值为 NULL 的行。
COUNT 函数
函数 COUNT() 用于计数,使用 COUNT() 可以确定表中行的数目或符合特定条件的行的数目。
如下 SQL 返回顾客表中顾客的总数,其中顾客表如下:
SQL 语句:
SELECT
COUNT( * )
FROM
Customers;
聚合结果:
其中 COUNT(*) 对所有行计数。下面只统计填写了 Email 地址的顾客数量。
SELECT
COUNT(cust_email) AS num_cust
FROM
Customers;
聚合结果:
注:
COUNT(*)在计数时不会忽略值为 NULL 的行;COUNT()在传入列名时,会忽略指定列为 NULL 的行。
MAX 函数
函数 MAX() 要求指定列名,返回列中的最大值。如下的 SQL 返回产品表中最贵物品的价格。
SELECT
MAX( prod_price ) AS max_price
FROM
Products;
聚合结果:
注:
MAX()函数求最大值时忽略值为 NULL 的行。
MIN 函数
MIN 与 MAX 相反,求出指定列的最小值。如下的 SQL 返回商品表中最廉价产品的价格。
SELECT
MIN( prod_price ) AS min_price
FROM
Products;
聚合结果:
注:
MIN()函数求最小值时忽略值为 NULL 的行。
SUM 函数
SUM 函数对指定列进行求和。我们以订单表说明 SUM 函数的使用。
其中 quantity 为订单包含的某种商品的数量。如下的 SQL 计算订单 20005 一共购买了多少件商品。
SELECT
SUM( quantity ) AS sum_quantity
FROM
OrderItems
WHERE
order_num = '20005';
聚合结果:
此外,还可以计算订单 20005 的总金额:
SELECT
SUM( quantity * item_price ) AS sum_quantity
FROM
OrderItems
WHERE
order_num = '20005';
计算结果:
注:
SUM函数忽略列值为 NULL 的行。
此外,聚合时还允许先去重。比如,计算供应商 DLL01 定价的平均水平,这是就需要先进行去重,再计算平均值。
SELECT
AVG( DISTINCT prod_price ) AS avg_price
FROM
Products
WHERE
vend_id = 'DLL01';
聚合结果:
最后,在一个 SELECT 语句中也可以包含多个聚合函数。下面的查询语句就包含了 4 个聚合函数。
SELECT
COUNT( * ) AS num_items,
MIN( prod_price ) AS min_price,
MAX( prod_price ) AS max_price,
AVG( prod_price ) AS avg_price
FROM
Products;
聚合结果:
小结
聚合函数用于数据汇总,SQL 支持 5 个聚合函数,聚合函数除了单独使用,最常见的场景是结合分组,即分组聚合。我们下节见~







网友评论