聚集函数
聚集函数(aggregate function)对某些行运行的函数,计算并返回一个值。
1 AVG()函数
SELECT AVG(prod_price) AS avg_price
FROM Products;
警告:只用于单个列
AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
说明:NULL值
AVG()函数忽略列值为NULL的行。
2 COUNT()函数
COUNT()函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
- 使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
- 使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。
说明:NULL值
如果指定列名,则COUNT()函数会忽略指定列的值为空的行,但如果COUNT()函数中用的是星号(*),则不忽略。
3 MAX()函数 MIN()
5 SUM()函数
SELECT SUM(item_price*quantity)AS total_price
FROM OrderItems
WHERE order_num=20005;
说明:NULL值
SUM()函数忽略列值为NULL的行。
聚集不同值
- 对所有行执行计算,指定ALL参数或不指定参数(因为ALL是默认行为)。
- 只包含不同的值,指定DISTINCT参数。
提示:ALL为默认
ALL参数不需要指定,因为它是默认行为。如果不指定DISTINCT,则假定为ALL。
在使用了DISTINCT后,此例子中的avg_price比较高,因为有多个物品具有相同的较低价格。排除它们提升了平均价格。
SELECT AVG(DISTINCT prod_price)AS avg_price
FROMProducts
WHERE vend_id='DLL01';
警告:DISTINCT不能用于COUNT(*)
如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*)。类似地,DISTINCT必须使用列名,不能用于计算或表达式。
组合聚集函数
SELECT COUNT(*)AS num_items,
MIN(prod_price)AS price_min,
MAX(prod_price)AS price_max,
AVG(prod_price)AS price_avg
FROMProducts;