设为首页 收藏本站
查看: 587|回复: 0

[经验分享] SQL Server 2005---聚合函数(分组函数)

[复制链接]

尚未签到

发表于 2016-11-2 05:16:36 | 显示全部楼层 |阅读模式
转载于:http://blog.csdn.net/hanren86/article/details/5744785

聚合函数对一组值执行计算,并返回单个值。除了 COUNT 以外,聚合函数都会忽略空值(NULL)。聚合函数经常与 SELECT 语句的 GROUP BY 子句一起使用。

所有聚合函数均为确定性函数。也就是说,只要使用一组特定输入值调用聚合函数,该函数总是返回相同的值。


聚合函数只能在以下位置作为表达式使用:


SELECT 语句的选择列表(子查询或外部查询)。COMPUTE 或 COMPUTE BY 子句。HAVING 子句。
1.COUNT( { [ ALL ]expression| * } )

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
返回的结果为:
所在地数量
--------------------
3

这才是我们想要的结果。

2.SUM函数

返回表达式中所有值或仅 DISTINCT 值的总和。SUM 只能与数字列一起使用。空值将被忽略。

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


SELECTSUM(数量)AS总数  
  FROMProductOrders
  执行语句将返回以下结果:
  Total
  -----------
  1837


3.AVG函数

返回组中各值的平均值。空值将被忽略。


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

  


SELECT AVG(单价* 数量) As 平均金额  
FROM ProductOrders
WHERE 所在地 = “北美洲”
返回结果如下:
平均金额
---------------------
862.3075


4.MAX函数

返回表达式中的最大值。空值将被忽略。

MAX()函数返回给定数据集中的最大值。我们可以给该函数一个字段名称来返回表中给定字段的最大值。还可以在MAX()函数中使用表达式和GROUP BY从句来加强查找功能。

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


SELECTMAX(数量*单价)As'最大的订单'  
  FROMProductOrders
  返回结果如下:
  最大的订单
  ---------------------
  2517.58


5.MIN函数

返回一组原子值 $arg 中的最小值。

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


  
SELECT 所在地 , MIN( 数量 * 单价 ) AS ' 最小订单 '
FROM ProductOrders
GROUP BY 所在地
返回结果如下:
所在地  最小订单
------------- ---------------------
非洲  167.04
欧洲  2099.02
北美洲  70.65

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-294360-1-1.html 上篇帖子: Sql Server实用操作-SQL语句导入导出大全 下篇帖子: SQL Server 2000中的触发器使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表