SQL学习之汇总数据之聚集函数

一、

1、我们经常需要汇总数据而不用把他们实际检索出来,为此SQL提供了专门的函数,以便于分析数据和报表生成,这些函数的功能有:

(1)确定表中行数(或者满足单个条件或多个条件或包含某个特定值的行数)。

(2)获得表中某些行的和

(3)找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。

上述功能都需要汇总表中的数据,而不需要实际数据本身。因此返回实际表数据纯属浪费时间和处理资源(更不用说带宽了)。

2、下面是SQL提供的5个常用的聚集函数

(1)AVG()      ---返回某列的平均值

(2)COUNT()      ---返回某列的行数

(3)MAX()      ---返回某列的最大值

(4)MIN()      ---返回某列的最小值

(5)SUM()      ---范回某列之和

如下代码:

select * from dbo.tb_order

现在有个需求,需要求出所有订单的单价和,下面是解决代码:

select SUM(price) from dbo.tb_order

ok,完成需求,拿到所有的单价之和!

3、下面是当我们使用上面5个聚集函数需要注意的地方

(1)MAX()和MIN()不仅可以找出最大/最小 的数值和日期值,许多DBMS(不是所有)允许将它们用来返回任意列(这里只的是任意数据类型)的最大/最小 值,包括返回文本的最大/最小值,在用于文本数据时,MAX()/MIN()返回目标列排序后的最后一行/最前面的行。

(2)MAX()和MIN()函数忽略列值为null的行

(3)当我们使用上面的聚集函数计算表中的列时,需要去掉一些重复的数据是可以使用DISTINCT,代码如下:

select * from dbo.tb_order

这是全部数据,现在需要ordercount列的总数,代码如下:

select COUNT(ordercount) from dbo.tb_order

结合上面两个检索的结果图,我们发现中间有很多的重复数据,下面是解决代码:

select COUNT(DISTINCT ordercount) from dbo.tb_order

ok,完成需求!把重复的都过滤掉了.

注意:DISTINCT不能用于COUN(*),只能用于COUNT(),因为DISTICT只能作用于列名,也就是说DISTICT 后面只能跟列名!

 

posted @ 2016-08-28 00:01  郑小超  阅读(808)  评论(0编辑  收藏  举报