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

[经验分享] T-SQL集合函数

[复制链接]

尚未签到

发表于 2018-10-22 10:50:11 | 显示全部楼层 |阅读模式
  --本文为学习笔记,(《t_sql》作者:Robert Sheldon 译者:冯昀晖 来源:TT中国)
  T-SQL集合函数
  基础知识
  --在SQL Server 2008中,Transact-SQL有一些集合函数,这些函数支持你执行这类计算。一个T-SQL集合函数返回一个值,可以被作为一个表达式用在SELECT查询列表或者“COMPUTE”,“COMPUTE BY”或者“HAVING”从句中。所有集合函数都忽略“null”值,除了“COUNT”函数。
  select territord_id,avg(subtotal) as avgsales,sum(subtotal) as toatalsales from sales.salesorderheader group by territory_id order by territory_id

  --该例按“Territory>  --另外两个集合函数:“MAX”函数和“MIN”函数。“MAX”函数返回一组值中的最大值,而“MIN”函数返回最小值。这两个函数都会忽略“null”值。当处理字符数据时,最大值和最小值是基于列的自然顺序计算的。当然,也可以对字符和日期数据使用“MAX”函数和“MIN”函数。例如:“name”列被指定为“nvarchar”数据类型。当我对该列使用“MAX”函数或者“MIN”函数时,返回的最大值和最小值是基于该列名称的字母顺序计算的,对日期时间列使用“MIN”函数或者“MAX”函数,返回的值会基于保存在该列中日期时间值的最早值或者最晚值进行计算。
  计算行数
  “COUNT”函数返回一组值的数量。与其他集合函数不同,你可以在计数时指定是否包括“null”值。此外,你可以指定是计算所有值,还是只计算不同的值
  select count(*) as productcount,--集合的行数,包含null值
  count(productmodelid) as modelcouont,--列productmodelid的行数,不包含null值
  count(discinct productmodelid) as distinctcount --列productmodelid不重复的行数,非null值
  from production.product
  --注意:大部分集合函数支持“DISTINCT”关键字,所以你可以指定集合函数只在指定组中不重复的数据中执行。详细信息请参考SQL Server联机丛书中关于如何在各个函数中使用“DISTINCT”的内容。
  --“COUNT”函数返回“int”类型值,“COUNT_BIG”返回“bigint”值。
  操作分组数据
  --在T-SQL语句中使用“GROUP BY”从句时,你可以使用“ROLLUP”,“CUBE”或者“GOURPING SETS”操作符来指定包含在结果集中的附加统计数据。这部分汇总数据在“GROUP BY”列表中表示为“null”值。 这是“null”值的一种特殊用法。
  --然而,在“GROUP BY”列中指定的该列可以包含“null”值,(这种情况下)在该列的结果中也会显示为“null”。
  --要区分这两种类型的“null”值,可以使用SQL Server提供的“GROUPING”集合函数。该函数可以明确指定“GROUP BY”从句中指定的列是否参与集合计算。 如果结果集中的值参与集合运算了,则“GROUPING”函数返回值“1”。否则,该函数返回值为“0”
  select color,
  avg(listprice) as avgprice,count(*) as totalamount,
  grouping(color) as agggroup --“GROUPING”函数常常用来指明在某列中显示的值是否是一个分组值,还是参与集合运算的累积值
  from producttion.product group by color with rollup
  --“GROUP BY”从句带有“WITH ROLLUP”操作符。因为“Color”是“GROUP BY”从句中指定的列,所以该列可以被用在“SELECT”列表的“GROUPING”函数中。
  --“GROUPING”函数只能被用在“SELECT”列表,“HAVING”从句或者“ORDER BY”从句中。
  验证总和校验
  --SQL Server还提供了“CHECKSUM_AGG”函数,该函数支持对一组数值运行总和校验。这在检测某个表数据的变化时很方便。然而,要注意的是该总和校验只能被用在整数表达式上,在执行计算时会忽略“null”值。
  select checksum_agg(cast(quantity as int)) as checksumagg,--返回262
  checksum_agg(distinct cast(quantity as int)) as checksumdistinct --返回78
  from production.productinventory
  --因为表productinventory 的quantity列 配置的数据类型为smallint,所以在运行总和校验之前,必须把它转换成int 的数据类型。
  获取统计数据
  SQL Server有四个集合函数可以支持你对数值型列的一组值做数据统计:
  STDEV:返回值的统计标准方差。
  STDEVP:返回总体值的统计标准方差。
  VAR:返回值的统计方差。
  VARP:返回总体值的统计方差。
  --上面每个函数都会忽略“null”值,返回值都是浮点类型值。返回值表示该组值偏离平均值的程度(标准方差是方差的平方根)。抱歉的是,我不是专业学统计的,所以你要想了解更多关于如何计算标准方差和方差(以及统计群体与那些计算有多契合)的详细知识,那得去找本统计学方面的书好好查查了。与此同时,下面的语句展示了这些函数的用法: select stdev(listprice) as stdevprice,stdevp(listprice) as stdevpprice,var(listprice) as varprice,varp(listprice) as varpprice from production.product


运维网声明 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-624885-1-1.html 上篇帖子: T-SQL.字符串函数 下篇帖子: sqlserver学习--SQL语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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