聚集函数

我们经常需要汇总数据而不需要把它们实际检索出来。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语句执行了四个聚集计算。

更多推荐

SQL学习笔记9- 汇总数据