09 汇总数据

1.聚集函数(aggregate function

对某些行运行的函数,计算并返回一个值。

汇总表中的数据,而不需要实际数据本身的SQL查询有:

确定表中行数;

获得表中某些行的和;

找出表列的最大值、最小值、平均值。

为了方便这种类型的检索,SQL给出了5个聚集函数。

函数

语法(MySQL

AVG()

返回某列的平均值

COUNT()

返回某列的行数

MAX()

返回某列的最大值

MIN()

返回某列的最小值

SUM()

返回某列值之和

(1)AVG()函数

通过对表中行数计算并计算其列值之和。可用来返回所有列的平均值,也可用来返回特定列或行的平均值。

为了计算Products表中所有产品的平均价格,输入:

SELECT AVG(prod_price) AS avg_price

FROM Products;

输出:

为了返回特定供应商所提供产品的平均价格,输入:

SELECT AVG(prod_price) AS avg_price

FROM Products

WHERE vend_id = 'DLL01';

输出:

AVG()只能用于单个列,为了获得多个列的平均值,必须使用AVG()函数。AVG()函数忽略列值为NULL的行。

(2)COUNT()函数

进行计数,可确定表中行的数目或符合特定条件的行的数目。

使用COUNT(*)对表中行的数目进行极速,不管表列中包含的是空值(NULL)还是非空值;

使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

为了返回Customers表中顾客的总数,输入:

SELECT COUNT(*) AS num_cust

FROM Customers;

输出:

只对具有电子邮件地址的客户计数,输入:

SELECT COUNT(cust_email) AS num_cust

FROM Customers;

输出:

(3)MAX函数

返回列中的最大值,要求指定列名。

输入:

SELECT MAX(prod_price) AS max_price

FROM Products;

输出:

(4)MIN函数

返回列中的最小值,要求指定列名。

输入:

SELECT MIN(prod_price) AS min_price

FROM Products;

输出:

(5)SUM()函数

用来返回指定列值的和(总计)。

OrderItems包含订单中实际的物品,每个物品有相应的数量。为了检索所订购物品的总数(所有quantity值之和),输入:

SELECT SUM(quantity) AS items_ordered

FROM OrderItems

WHERE order_num = 20005;

输出:

SUM()也可以用来合计计算值。为了合计每项物品的item_price*quantity,得出总的订单金额,输入:

SELECT SUM(item_price*quantity) AS total_price

FROM OrderItems

WHERE order_num = 20005;

输出:

SUM()函数忽略列值为NULL的行。

2.聚集不同值

以上聚集函数都可以如下使用:

对所有行执行计算,指定ALL参数或不知道参数(因为ALL是默认行为);

只包含不同的值,指定DISTINCT参数。DISTINCT必须使用列名,不能用于计算或者表达式。

下面使用AVG()函数返回特定供应商提供产品的平均价格,若使用DISTINCT参数,平均值只考虑各个不同的价格。

输入:

SELECT AVG(DISTINCT prod_price) AS avg_price

FROM Products

WHERE vend_id = 'DLL01';
输出:

使用了DISTINCT后的avg_price更高,这是因为有多个物品具有相同的较低价格,排除它们提升了平均价格。

3.组合聚集函数

输入:

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语句执行了4个聚集计算,返回4个值:Products表中物品的数目,产品杰哥的最高值、最低值以及平均值。

posted @ 2016-12-04 19:23  Sumomo  阅读(140)  评论(0编辑  收藏  举报