SQL聚合函数

COUNT(*)计算元组个数

COUNT(列名)对一列中的值计算个数

SUM(列名)求某一列值的总合

AVG(列名)求某一列值的平均值

MAX(列名)

MIN(列名)

我们先从SUM函数开始。这个函数通常在SELECT语句中使用,返回系列值的总数。假设产品项目经理想了解目前为止商品的总销售额,那么我们可以使用以下的查询脚本:

  SELECT SUM(数量) AS 总数

 

  FROM ProductOrders

  执行语句将返回以下结果:

  Total

  -----------

  1837

AVG函数(平均函数)使用方法和SUM类似,它给我们提供系列值的算术平均数。这次我们可以尝试稍微复杂点的任务:找出北美洲大陆所有订单的金额平均值。注意,我们需要将“数量”列和“单价”列相乘计算出每张订单的金额总数。查询脚本如下:

  

SELECT AVG(单价* 数量) As 平均金额

 

FROM ProductOrders

WHERE 所在地 = “北美洲”

    返回结果如下:

平均金额

---------------------

862.3075

在本文第二部分,我们将探讨计算满足设定标准的记录数量的方法。

第二部分:COUNT计数函数

SQL提供了COUNT函数来查询满足设定标准的记录的数量。我们可以使用单独COUNT(*)语法来检索一个表内的行数。此外,还可以利用WHERE子句来设置计数条件,返回特定记录的条数。例如,假设我们的产品销售经理想了解公司处理了多少张要求购买100个以上产品的订单。下面是满足这个条件的SQL查询脚本:

SELECT COUNT(*) AS '大订单数量'

 

FROM ProductOrders

WHERE 数量> 100

    返回结果如下:

大订单数量

----------------------

3

COUNT函数还允许使用 DTINCT关键字和表达式来计算满足表达式的值在目标数据中出现的数量。同样地,还可以使用ALL关键字来返回满足表达式的值的全部数量,不管其中有没有重复值。例如,产品经理想通过一个简单查询返回数据库中“所在地”的数量。

  首先我们来看看使用ALL关键字的查询:

SELECT COUNT(ALL 所在地 ) As ' 所在地数量 '

 

FROM ProductOrders  

    返回的结果为:  

所在地数量  

-------------------- 

7  

 

显然这不是我们需要的结果。因为根据ProductOrders表所示,所有订单的所在地只有三个,分别是北美洲、非洲、欧洲。下面让我们来用DISTINCT关键字来代替看看: 

  

SELECT COUNT(DISTINCT 所在地) As '所在地数量'

 

FROM ProductOrders

    返回的结果为:

所在地数量

--------------------

这才是我们想要的结果。在本文的第三部分,我们将介绍如何利用函数来查找目标集中的最大值和最小值。 第三部分:最大值和最小值

在本文的最后一节,我们来看看SQL为我们提供用来查找满足给定表达式的最大值和最小值的函数。MAX()函数返回给定数据集中的最大值。我们可以给该函数一个字段名称来返回表中给定字段的最大值。还可以在MAX()函数中使用表达式和GROUP BY从句来加强查找功能。

还是ProductOrders表,假设我们的产品经理想要从这个数据库中找到给公司带来最多收入的那份订单。我们可以使用以下查询来找到这张订单,并返回该订单的销售总金额:

  SELECT MAX(数量 * 单价)As '最大的订单'

 

  FROM ProductOrders

  返回结果如下:

  最大的订单

  ---------------------

  2517.58

MIN()函数的用法类似,但返回表达式的最小值。让我们用MIN()函数来尝试稍微复杂一点的查询。我们的销售部门目前正在分析小订单的数据。他们想要查询每个所在地的最小订单。这除了要在表达式中计算值外,还需要用到GROUP BY从句来总结所在地的数据。SQL查询如下:

 

SELECT 所在地 , MIN( 数量 * 单价 ) AS ' 最小订单 '

FROM ProductOrders

GROUP BY 所在地  

    返回结果如下:  

所在地      最小订单

------------- --------------------- 

非洲         167.04

欧洲        2099.02

北美洲    70.65  

posted @ 2011-12-11 15:04  @#¥%……  阅读(1687)  评论(0编辑  收藏  举报