以下面这个表的数据作为示例。

什么是聚合函数?

聚合函数:聚合函数就是对一组值进行计算后返回单个值(即分组)。聚合函数在计算时都会忽略空值(null)。

所有的聚合函数均为确定性函数。即任何时候使用一组相同的输入值调用聚合函数执行后的返回值都是相同的,无二义性。

COUNT(统计函数):COUNT函数可以用来返回所有选中行的总行数,它有一个参数,可以是 '*'(即所有列)、'1'(效果同前者类似)和具体的列名。

     列名前面还可以加上 DISTINCT 关键字(即去掉重复项)。返回值类型为: int

     select count(1) from Student    -- 返回 9

     select count(S_Sex) from Student    -- 返回 9

     select count(distinct S_Sex) from Student    -- 返回 2,即去重之后性别只有两种

COUNT_BIG(统计函数):COUNT_BIG函数的使用方法和COUNT函数相同,只不过返回值为 bigint 数据类型。

注意:count(字段名),如果字段名为NULL,则count函数不会统计。

SUM(求和函数):SUM函数用于求和,计算指定列中所有不为空(null)的总和。返回值类型为: int

 --求所有学员的身高总和,因为字段类型是 varchar 类型,所以需要转换一下
select SUM(convert(int,S_Height)) from Student -- 返回 1588 --求不同身高的学员的身高总和(去掉重复项)
select SUM(distinct convert(int,S_Height)) from Student -- 返回 1403

AVG(求平均值函数):AVG函数用于求平均值,计算指定列中所有不为空(null)的平均值。返回值类型为: int

     --求所有学员的平均身高,因为字段类型是 varchar 类型,所以需要转换一下
select AVG(convert(int,S_Height)) from Student -- 返回 176 --求不同身高的学员的平均身高(去掉重复项)
select AVG(distinct convert(int,S_Height)) from Student -- 返回 175 --求男同学的平均身高
select AVG(convert(int,S_Height)) from Student where S_Sex='男' -- 返回 177

MAX(最大值函数):MAX函数用于计算最大值,可以使用于numeric、char、varchar、money、smallmoney、或datetime列,但不能用于bit列。返回值类型为: int

     --求所有学员的最大身高,因为字段类型是 varchar 类型,所以需要转换一下
select MAX(convert(int,S_Height)) from Student -- 返回 190 --求女同学的最大身高
select MAX(convert(int,S_Height)) from Student where S_Sex='女' -- 返回 183

MIN(最小值函数):MIN函数用于计算最小值,可以使用于numeric、char、varchar、money、smallmoney、或datetime列,但不能用于bit列。返回值类型为: int

     --求所有学员的最小身高,因为字段类型是 varchar 类型,所以需要转换一下
select MIN(convert(int,S_Height)) from Student -- 返回 155 --求女同学的最小身高
select MIN(convert(int,S_Height)) from Student where S_Sex='女' -- 返回 165

STDEV(标准偏差值函数):STDEV函数用于计算标准偏差值,即每一个数值与平均值的标准差。返回值类型为:float

     --求所有学员的身高标准差,因为字段类型是 varchar 类型,所以需要转换一下
select STDEV(convert(int,S_Height)) from Student -- 返回 11.2928197443234 --求女同学的身高标准差
select STDEV(convert(int,S_Height)) from Student where S_Sex='女' -- 返回 7.88986691902975

VAR(方差值函数):VAR函数用于计算方差值。返回值类型为:float

     --求所有学员的身高方差,因为字段类型是 varchar 类型,所以需要转换一下
select VAR(convert(int,S_Height)) from Student -- 返回 127.527777777781 --求女同学的身高方差
select VAR(convert(int,S_Height)) from Student where S_Sex='女' -- 返回 62.25

HAVING:HAVING子句仅用于带有 GROUP BY 子句的查询语句中,WHERE子句用于每一行数据的筛选(在变成一个组的某一部分之前),而HAVING子句用于分组的聚合值的筛选。

 --查询身高至少有一个相同的值
select S_Height,count(S_Height)
from Student
group by S_Height
having count(1)>1

聚合开窗函数:

聚合函数加上 over() 开窗函数就是聚合开窗函数。

下面看两个示例:

   select S_StuNo,S_Name,S_Height,
sum(convert(int,S_Height)) over(order by S_Height)
from Student

以上是未使用 partition by 指定分区的,可以看出,聚合列的值,第一行的值,为当前行,第二行的值为前面的所有行和当前行的值,以此类推。

   select S_StuNo,S_Name,S_Height,
sum(convert(int,S_Height)) over(partition by S_Height order by S_Height)
from Student

以上是使用 partition by 指定分区的,所以会先分区,再聚合,因为 S_Height 这一列只有两条数据的值是相同的,所以这两条数据为一个分区,其他全部一条数据一个分区,所以只有相同值的两条数据的值为聚合值。

     select S_StuNo,S_Name,S_Height,
count(S_Height) over(order by S_Height)
from Student

可以看到上面的数据是没有 7 的,而是直接是 6 跳到 8,我猜可能是因为字段的值相同的存在2条。

     select S_StuNo,S_Name,S_Height,
count(S_Height) over(partition by S_Height order by S_Height)
from Student

因为学号为 012 和 013 的 S_Height 值相同,存在一个分区,所以是2条,其他都是一个分区一条数据。

   select S_StuNo,S_Name,S_Height,
AVG(convert(int,S_Height)) over(order by S_Height)
from Student

以上未使用 partition by 子句指定分区,可以看出第一条数据为当前行的平均值,第二条数据为前面所有行和当前行的平均值,以此类推。

   select S_StuNo,S_Name,S_Height,
AVG(convert(int,S_Height)) over(partition by S_Height order by S_Height)
from Student

以上使用 partition by 子句指定了分区,所以是在每个分区进行计算平均值。

其它聚合开窗函数使用方法类似,就不记了。

SQL Server聚合函数与聚合开窗函数的更多相关文章

  1. SQL SERVER 2005允许自定义聚合函数-表中字符串分组连接

    不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR  ...

  2. SQL SERVER 2005允许自定义聚合函数

    不多说了,说明后面是完整的代码,用来将字符串型的字段的各行的值拼成一个大字符串,也就是通常所说的Concat 例如有如下表dict  ID  NAME  CATEGORY  1 RED  COLOR  ...

  3. SQL Server排名函数与排名开窗函数

    什么是排名函数?说实话我也不甚清楚,我知道 order by 是排序用的,那么什么又是排名函数呢? 接下来看几个示例就明白了. 首先建立一个表,随便插入一些数据. ROW_NUMBER 函数:直接排序 ...

  4. SQL Server 中截取字符串常用的函数

    SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...

  5. SQL Server中的LEFT、RIGHT函数

    SQL Server中的LEFT.RIGHT函数. LEFT:返回字符串中从左边开始指定个数字符. LEFT(character_expression,integer_expression); RIG ...

  6. Spark(十三)SparkSQL的自定义函数UDF与开窗函数

    一 自定义函数UDF 在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_ ...

  7. 学习如何看懂SQL Server执行计划(二)——函数计算篇

    二.函数计算部分 --------------------标量聚合--------------------/* 标量聚合-主要在聚合函数操作中产生 计算标量:根据行中的现有值计算出一个新值 流聚合:在 ...

  8. SQL Server进阶(十二)函数

    概述 函数有且只有一个输入参数和一个返回值,而存储过程没有这个限制: 返回表变量的函数可以当做VIEW或者临时表用在WHERE/HAVING/SELECT/JOIN语句中而存储过程不可以: 存储过程中 ...

  9. SQL Server 中的窗口函数(2012 新函数)

    简介 SQL Server 2012之后对窗口函数进行了极大的加强,但对于很多开发人员来说,对窗口函数却不甚了解,导致了这样强大的功能被浪费,因此本篇文章主要谈一谈SQL Server中窗口函数的概念 ...

  10. 在SQL SERVER中实现RSA加解密函数(第二版)

    /*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.5 注: 转载请保留此信息 更 ...

随机推荐

  1. Echarts地图绘制(散点,色卡)

    echarts绘制地图时,提供了js内部注册,也提供了json数据手动注册,这两种都可以绘制对应地图,但有一点不同的是,js内部只注册了中国地图和世界地图,而json数据提供了世界,中国,中国城市的数 ...

  2. sass在vue注意的地方

    当用@import导入vue页面的时候,在sass/scss文件里面的url,路径开始就是导入的vue位置. 当前目录结构 App.vue 我在App.vue导入了public.scss,那在publ ...

  3. OSGI企业应用开发(八)整合Spring和Mybatis框架(一)

    到目前为止,我们已经学习了如何使用Blueprint將Spring框架整合到OSGI应用中,并学习了Blueprint&Gemini Blueprint的一些使用细节.本篇文章开始,我们將My ...

  4. linux根目录下的文件夹及文件

    bin->放置执行文件的目录,但毕竟特殊,其下放置的是在单用户维护模式下还能被操作的命令.主要有cat.chmod.date. mv.mkdir.cp.bash等常用命令.dev->存放设 ...

  5. Spring boot 多模块项目 + Swagger 让你的API可视化

    Spring boot 多模块项目 + Swagger 让你的API可视化 前言 手写 Api 文档的几个痛点: 文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时. 接口返回结果不 ...

  6. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  7. 安卓测试【三】adb简单命令及monkey使用

    Ⅰ 配置好android sdk环境变量之后,将android手机连接到电脑上,进行一些adb的简单命令的操作. adb,安卓调试桥,android   sdk的一个工具.直接操作管理安卓模拟器或者真 ...

  8. [我的阿里云服务器] —— FTP配置

    前言: FTP是我们用来向服务器上传或者下载文件很重要的一个工具,特别是云服务器,无法使用外设传送文件. 所以下面我们就来配置一下FTP,但是FTP的21端口,通常也是黑客进攻的一个目标,所以需要小心 ...

  9. 常用内置方法之:__str__,__repr__

    class Test(object): def __init__(self): pass def __str__(self): return "test" test = Test( ...

  10. 从零自学Java-2.初步理解Java程序使如何工作的

    1.学习Java应用程序是如何工作的 2.构成一个应用程序 3.向应用程序传递参数 4.学习Java程序是如何组织的 5.在应用程序中创建一个对象 程序Root:输出225的正平方根 package ...