聚合分析

在访问数据库时,经常需要对表中的某列数据进行统计分析,如求其最大值、最小值、平均值等。所有这些针对表中一列或者多列数据的分析就称为聚合分析。

在SQL中,可以使用聚合函数快速实现数据的聚合分析。与第7章介绍的SQL中的函数不同,聚合函数是对列中的一系列数据进行处理,返回单个统计值;而前面的函数则是对列中的单个数据进行处理。

聚合函数

   函 数 名称

     函 数 功 能

SUM()

返回选取结果集中所有值的总和

MAX()

返回选取结果集中所有值的最大值

MIN()

返回选取结果集中所有值的最小值

AVG()

返回选取结果集中所有值的平均值

COUNT()

返回选取结果集中行的数目

SUM()

SELECT  SUM(SAL) AS BOYSAL FROM  TEACHER WHERE   TSEX='男'

当对某列数据进行求和时,如果该列存在NULL值,则SUM函数会忽略该值。(加上all也对每列进行求和)

COUNT()

必须指定一个列的名称或者使用星号,星号表示计算一个表中的所有记录。两种使用形式如下。

 COUNT(*),计算表中行的总数,即使表中行的数据为NULL,也被计入在内。

 COUNT(column),计算column列包含的行的数目,如果该列中某行数据为NULL,则该行不计入统计总数.

 注意

COUNT(*)函数将准确地返回表中的总行数,而仅当COUNT()函数的参数列没有NULL值时,才返回表中正确的行计数,所以仅当受NOT NULL限制的列作为参数时,才可使用COUNT( )函数代替COUNT(*)函数。

SELECT  COUNT(TNO) AS TOTAL_TNO, COUNT(TNAME) AS TOTAL_TNAME, COUNT(SAL) AS TOTAL_SAL

FROM  TEACHER

使用COUNT( )函数对多列中的数据计数

对多列计数,则需要将要计数的多列通过连接符连接后,作为COUNT( )函数的参数

(暂时无例子 以后补充上来)

最大/最小值函数—MAX()/MIN()

列中的数据可以是数值、字符串或是日期时间数据类型。MAX()/MIN()函数将返回与被传递的列同一数据类型的单一值

这里举一个例子,有典型性的.

SELECT MAX (AGE) AS MAXAGE FROM    TEACHER (取年纪最大的老师)

但是通常取出来后是要看老师的基本信息的,如姓名,性别,工作的年限等.

然而SQL不支持如下的SELECT语句

SELECT TNAME, DNAME, TSEX, MAX (AGE) FROM    TEACHER

那该怎么办了?

SELECT TNAME, DNAME, TSEX,SAL ,AGE FROM    TEACHER

WHERE   AGE=MAX (AGE)  就可以

当列的类型是 字符串或者日期时

字符串

对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。

日期

其大小排列就是日期时间的早晚,越早认为其值越小

均值函数——AVG()

AVG()函数的执行过程实际上是将一列中的值加起来,再将其和除以非NULL值的数目。所以,与SUM( )函数一样,AVG()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。

SELECT  AVG (column_name) FROM    table_name

当你想显示 其他信息时,如姓名,年纪,方法如下

SELECT  * FROM  TEACHER

WHERE   AGE >= (SELECT AVG (AGE) FROM    TEACHER)

ORDER BY    AGE

聚合分析的重值处理

5种聚合函数,可以作用于所选列中的所有数据(不管列中的数据是否有重置),也可以只对列中的非重值进行处理,即把重复的值只取一次进行聚合分析。当然,对于MAX()/MIN()函数来讲,重值处理意义不大。

可以使用ALL关键字指明对所选列中的所有数据进行处理,使用DISTINCT关键字指明对所选列中的非重值数据进行处理。以AVG()函数为例,语法如下。

SELECT  AVG ([ALL/DISTINCT] column_name)

FROM    table_name

与聚合函数分不开的东西那算是分组了

GROUP BY子句创建分组

SELECT               column, SUM(column)

FROM                 table

GROUP BY             column

说明:GROUP BY子句依据column列里的数据对行进行分组,即具有相同的值的行被划为一组。它一般与聚合函数同时使用。当然,这里的SUM()函数也可以是其他聚合函数。所有的组合列(GROUP BY子句中列出的列)必须是来自FROM子句列出的表,不能根据实际值、聚合函数结果或者其他表达式计算的值来对行分组。

GROUP BY子句根据多列组合行

SELECT             DNAME,TSEX, COUNT(*) AS TOTAL_NUM

FROM               TEACHER

GROUP BY           DNAME,TSEX

ROLLUP运算符和CUBE运算符  主要用语扩展,暂时不写.以后添加.

HAVING子句

GROUP BY子句分组,只是简单地依据所选列的数据进行分组,将该列具有相同值的行划为一组。而实际应用中,往往还需要删除那些不能满足条件的行组,为了实现这个功能,SQL提供了HAVING子句。语法如下。

SELECT           column, SUM(column)

FROM             table

GROUP BY        column

HAVING        SUM(column) condition value

说明:HAVING通常与GROUP BY子句同时使用。当然,语法中的SUM()函数也可以是其他任何聚合函数。DBMS将HAVING子句中的搜索条件应用于GROUP BY子句产生的行组,如果行组不满足搜索条件,就将其从结果表中删除。

HAVING子句与WHERE子句

HAVING子句和WHERE子句的相似之处在于,它也定义搜索条件。但与WHERE子句不同,HAVING子句与组有关,而不是与单个的行有关。

   如果指定了GROUP BY子句,那么HAVING子句定义的搜索条件将作用于这个GROUP BY子句创建的那些组。

   如果指定WHERE子句,而没有指定GROUP BY子句,那么HAVING子句定义的搜索条件将作用于WHERE子句的输出,并把这个输出看作是一个组。

   如果既没有指定GROUP BY子句也没有指定WHERE子句,那么HAVING子句定义的搜索条件将作用于FROM子句的输出,并把这个输出看作是一个组。

1.

SELECT           DNAME, COUNT(TSEX) AS num_girl

FROM             TEACHER

WHERE            TSEX='女'

GROUP BY         DNAME

2.

SELECT           DNAME, COUNT(TSEX) AS num_girl

FROM             TEACHER

GROUP BY         DNAME

HAVING           TSEX='女'

sql语句 之聚合函数的更多相关文章

  1. 2019-1-11 SQL语句汇总——聚合函数、分组、子查询及组合查询

  2. SQL 语句转换格式函数Cast、Convert 区别

    SQL 语句转换格式函数Cast.Convert CAST和CONVERT都经常被使用.特别提取出来作为一篇文章,方便查找. CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同 ...

  3. Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数

    Oracle中,利用sql语句中的函数实现保留两位小数和四舍五入保留两位小数: select trunc(1.23856789,2) from dual round(m,n) 可以四舍五入 trunc ...

  4. SQL Server 自定义聚合函数

    说明:本文依据网络转载整理而成,因为时间关系,其中原理暂时并未深入研究,只是整理备份留个记录而已. 目标:在SQL Server中自定义聚合函数,在Group BY语句中 ,不是单纯的SUM和MAX等 ...

  5. SQL中的聚合函数

    聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体的聚合函数如下:1. AVG 返回指定组中的平均值,空值被忽略. 例 ...

  6. group by语句,聚合函数与其他语句(关系,执行过程)

    (本文一切基于SQL SERVER 2008 R2) 先来看一个语句执行过程发生的错误提示: 消息 8120,级别 16,状态 1,第 2 行 选择列表中的列 'SC.CNO' 无效,因为该列没有包含 ...

  7. SQL中的聚合函数运用

    参考网址: https://zhuanlan.zhihu.com/p/245115561 聚合函数是什么 聚合函数是对一组值执行计算,并返回单个值的函数.常与 SELECT 语句的 GROUP BY ...

  8. 【SQL】CLR聚合函数什么鬼

    之前写过一个合并字符串的CLR聚合函数,基本是照抄MS的示例,外加了一些处理,已经投入使用很长时间,没什么问题也就没怎么研究,近日想改造一下,遇到一些问题,遂捣鼓一番,有些心得,记录如下. 一.杂项 ...

  9. Excel下用SQL语句实现AVEDEV函数功能

    Excel下AVEDEV函数返回一组数据点到其算术平均值的绝对偏差的平均值. AVEDEV 是对一组数据中变化性的度量.最常见的应用就是统计平均分差. 但是如果在Excel中写SQL进行一些复杂的统计 ...

随机推荐

  1. java基础 集合 ArrayList 增删改除

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  2. Hibernate一对一、一对多、多对多注解映射配置

    一对一: 一对多: 多对多:

  3. mysql开启远程连接

    修改my.ini 去掉 bind-address 127.0.0.1 或添加 bind-address 0.0.0.0 mysql -u root -p 进入mysql,执行 '; 然后 flush ...

  4. dex文件格式二

    一. dex文件头 (1) magic value 在DexFile.c   dexFileParse函数中 会先检查magic opt 啥是magic opt呢? 我们刚刚从cache目录拷贝出来的 ...

  5. PHP程序员进阶学习书籍参考指南

    PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18     [初阶](基础知识及入门)   01. <PHP与MySQL程序设计(第4版)> ...

  6. delphi xe4 程序添加管理员权限要求后不能调试的解决方法

    环境: win7 企业版 xe4 问题: 把项目设置为需要管理员权限才能运行后,调试会弹出一个提示框,如图:

  7. angularjs里对JS的lowercase和uppercase的完善

    读angularjs的源码开头. var lowercase = function (string) { return isString(string) ? string.toLowerCase() ...

  8. MySQL 5.7 学习:功能性能的提升

    背景: 继上次介绍 初识 MySQL 5.6 新功能.参数完之后,刚好MySQL 5.7又GA了,在官方测试里看到,MySQL5.7在功能.性能.可用性.安全和监控上又提升了很高.现在看看和MySQL ...

  9. textarea输入回车,前台jsp不回车问题解决

    jsp引入标签: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"% ...

  10. MediaElement.js对不同浏览器的支持

    目前已经有很多html5播放器可以使用,使用html5播放器可以轻松的在页面中插入媒体视频,从而使我们的web页面变得更加丰富多彩,所以今天向大家推荐一款非常优秀的html5播放器MediaEleme ...