zoukankan      html  css  js  c++  java
  • sql语句 之聚合函数

     

     

       聚合分析

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

      在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='女'

  • 相关阅读:
    几种常见的基于Lucene的开源搜索解决方案对比
    【例子】Bobobrowse:lucene分组统计扩展组件
    Solr 相似页面MoreLikeThis
    eclipse安装、基本使用、常用设置
    iPhone开发入门守则:ObjectiveC编码规范系列教程
    ios开发学习按钮(Button)效果源码分享
    ios开发学习音频声效(Audio)效果源码分享系列教程
    ios开发学习动画(Animation)效果源码分享系列教程1
    ios开发学习图表(Chart)效果源码分享系列教程
    局网满猿关不住,一波码农出墙来。
  • 原文地址:https://www.cnblogs.com/huangyibo/p/3673666.html
Copyright © 2011-2022 走看看