聚集函数
我们经常需要汇总数据而不需要把它们实际检索出来。SQL有特定的函数来解决这类问题,例如:确定表中行数,获得表中某些行的和,找出表列的最大值、最小值、平均值
这些例子都需要汇总表中的数据,而不需要查出数据本身,因此不用返回实际表数据,我们需要的是汇总信息。SQL给出了五个聚集函数。
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
AVG()函数
SELECT AVG(prod_price) AS avg_price
FROM Products;
此SELECT语句返回avg_price,指的是Products表中所有产品的平均价格。
AVG()也可以确定特定列或者行的平均价格
SELECT AVG(prod_price) AS avg_price
FROM Products
WHERE vent_id='DLL01'
WHERE字句过滤出vent_id为DLL01的产品
一个AVG函数只能统计一个列的平均值,要统计多个列必须使用多个AVG函数。
COUNT()函数
COUNT()函数有两种使用方式,使用COUNT(*)对表中行的数目进行计数,不管列中包含的是空值(NULL)还是非空值
使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值
SELECT COUNT(*)AS num_cust
FROM Customers;
使用COUNT(*)对所有行计数,不管行中各列有什么值。计数值在num_cust中返回。
SELECT COUNT(cust_email)AS num_cust
FROM Customers;
使用COUNT(cust_email)对所有具有电子邮件的顾客计数
指定条件的COUNT会忽略NULL的行,而COUNT(*)不会忽略。
MAX()函数
SELECT MAX(prod_price)AS max_price
FROM Products;
MAX()返回Products表中最贵的物品价格。
MAX()函数忽略值为NULL的行
MIN()函数
SELECT MIN(prod_price)AS max_price
FROM Products;
MIN()返回Products表中最贵的物品价格。
MIN()函数忽略值为NULL的行
SUM()函数
SUM()用来返回列的和,例如从OrderItems检索quantity的和
SELECT SUM(quantity)AS items_ordered
FROM OrderItems
WHERE order_num=20005;
WHERE字句保证只统计20005订单的物品
聚集不同值
聚集函数可以使用DISTINCT检索不同值
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vent_id ='DLL01'
注意:DISTINCT不能用于COUNT(*)
组合聚集函数
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;
这里用单条SELECT语句执行了四个聚集计算。