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 后面只能跟列名!