聚集函数 aggregate function
用于汇总数据,而不查出数据本身。
AVG( ) 函数
用于确定单个列的平均值。要分别获得多个列的平均值,必须使用多个 AVG() 函数。
SELECT AVG(prod_price) AS avg_price
FROM Products;
忽略 NULL
COUNT( ) 函数
COUNT(*) 对表中行的数目计数,包括表列的 NULL 值 COUNT(column name) 对特定列的行进行计数,忽略 NULL 值
MAX( ) 函数
返回指定列的最大值,许多 DBMS 允许用于任意列,忽略 NULL
MIN( ) 函数
返回指定列的最小值,许多 DBMS 允许用于任意列,忽略 NULL
SUM( ) 函数
返回指定列值的和,忽略 NULL
在多个列上进行计算
利用算术操作符,所有聚集函数都可以用来执行多个列上的计算
SELECT SUM(item_price * quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005;
聚集非重复值
聚集函数默认附加 ALL 参数,对所有行执行计算 要使它只计算不同的值,需指定 DISTINCT 参数
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
注意,DISTINCT 不能用于 COUNT(*),必须使用列名,不能用于表达式。
分组
汇总计算时,对每个组分别计算。
创建分组 GROUP BY
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
- GROUP BY 子句可以包含任意数目的列或表达式,因此可以对分组进行嵌套,在最后指定的分组进行汇总
- 如果在 SELECT 中使用表达式,也必须在 GROUP BY 指定相同的表达式
- 除了聚集计算语句,SELECT 的每一列都必须在 GROUP BY 中给出
过滤分组 HAVING
前面所有 WHERE 子句都可以用 HAVING 替换,唯一的区别是 WHERE 过滤行,HAVING 过滤分组
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id
HAVING COUNT(*) >=2;