1. 组函数:对一组数据进行加工,每组数据返回一个值

  2. 常用的组函数:count()  avg()  max()   min()  sum()  

  3. count()函数 

    1. count(*) :返回总共的行数,不去除NULL值

    2. count(column):返回非NULL行的数量

    SQL> select count(*) ,count(sal),count(comm) from emp;
    
      COUNT(*) COUNT(SAL) COUNT(COMM)
    ---------- ---------- -----------

    3.除了count(*)意外,其他的组函数都要去除NULL

    SQL>select avg(sal),count(sal),sum(sal)/count(comm) average,count(sal)/count(nvl(comm,)) average2,count(comm) countnotnull  from emp
    
    AVG(SAL) COUNT(SAL)  AVERAGE   AVERAGE2 COUNTNOTNULL
    ---------- ---------- ---------- ---------- ------------
    2073.21429 7256.25 这里解释一下:avg()的除数是14,sum(sal)/count(comm)的除数则是4
  4. DISTINCT()函数
    SQL> select empno,ename,comm from emp;
    
         EMPNO ENAME      COMM
    ---------- -------- ----------
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
    JAMES
    FORD
    MILLER SQL> select count(distinct comm) from emp;--返回唯一的非空comm的数量 COUNT(DISTINCTCOMM)
    ------------------- 这里有个小问题:
    SQL> update emp set comm= where empno=
    row updated.
    SQL> select count(distinct comm ) from emp; COUNT(DISTINCTCOMM)
    ------------------- 说明:distinct只是将重复的字段给过滤掉了。并不能说明:返回唯一的非空comm的数量,这种说法只能是在comm非空且不重复的情况下才可以。 
  5. GROUP BY 子句:创建分组数据
    在SELECT语句中,没有使用分组函数的列必须在GROUP By子句中
  6. SQL> select deptno,avg(sal) from emp;
    select deptno,avg(sal) from emp
    *
    第 1 行出现错误:
    ​ORA-00937: 不是单组分组函数

    GROUP BY后面的列可以不出现在 SELECT语句中

    SQL> select avg(sal) from emp group by deptno;
    
      AVG(SAL)
    ----------
    1566.66667
    2375
    2916.66667

    多个列上使用 GROUP BY 子句

    SQL> select deptno,job,sum(sal) from emp group by deptno,job;
    
    DEPTNO JOB         SUM(SAL)
    ------ --------- ----------
    20 CLERK 1900
    30 SALESMAN 5600
    20 MANAGER 2975
    30 CLERK 950
    10 PRESIDENT 5000
    30 MANAGER 2850
    10 CLERK 1300
    10 MANAGER 2450
    20 ANALYST 7000 先按照deptno进行分组,deptno相同的再按照job进行分组
  7.   分组函数的误用

    1. 在SELECT 语句中,任何不在聚组函数中出现的列,必须在 GROUP BY 子句中

    2. 不能在 WHERE子句中对组函数做出限定,使用 HAVING 子句来限定分组

    SQL> select deptno,avg(sal) from emp where avg(sal)>  group by deptno;
    select deptno,avg(sal) from emp where avg(sal)> group by deptno
    *
    第 行出现错误:
    ORA-: 此处不允许使用分组函数
    正确用法:
    SQL> select deptno,avg(sal) from emp group by deptno having avg(sal)>;
    DEPTNO AVG(SAL)
    ---------- ---------- 2916.66667
  8.  组函数的嵌套

    1. 组函数只能嵌套一层

    2. 使用组函数嵌套,必须跟group by子句

    错误的写法:
    SQL> select max(avg(sal)) from emp;
    select max(avg(sal)) from emp
    *
    ERROR at line :
    ORA-: nested group function without GROUP BY 错误的写法:
    SQL> select deptno,max(avg(sal)) from emp group by deptno;
    select deptno, max(avg(sal)) from emp group by deptno
    *
    ERROR at line :
    ORA-: not a single-group group function
    因为select deptno查出来的是一列的内容,而组函数max()返回的只有一个值也错了、
    正确的写法:
    SQL> select max(avg(sal)) from emp group by deptno MAX(AVG(SAL))
    -------------
    2916.66667
  9.   子句执行的顺序
    SELECT子句
    FROM 子句
    WHERE 子句
    GROUP BY 子句
    HAVING 子句 select deptno,job,sum(sal)
    from emp
    where comm is not null
    group by deptno,job
    having sum(sal)>
    以上SQL语句的执行顺序 . from子句
    . select子句
    . where子句
    ​. group by 子句
    . 聚合运算:sum
    . having子句

ORACLE SQL 组函数【weber出品必属精品】的更多相关文章

  1. 全世界最详细的图形化VMware中linux环境下oracle安装(一)【weber出品必属精品】

    安装流程:前期准备工作--->安装ORACLE软件--->安装升级补丁--->安装odbc创建数据库--->安装监听器--->安装EM <前期准备工作> 安装 ...

  2. 全世界最详细的图形化VMware中linux环境下oracle安装(二)【weber出品必属精品】

    <ORACLE 10.2.05版本的升级补丁安装> 首先我们解压 $ unzip p8202632_10205_LINUX.zip 解压后我们会发现多出了个文件夹,他是:Disk1,进入D ...

  3. ORACLE SQL单行函数(三)【weber出品必属精品】

    16.L:代表本地货币符,这个和区域有关.这个时候我们想来显示一下人民币的符号:¥ $ vi .bash_profile ---写入如下内容: export NLS_LANG='SIMPLIFIED ...

  4. ORACLE SQL单行函数(一)【weber出品必属精品】

    1.SUBSTR:求父串中的子串 SUBSTR('HelloWorld',1,5) 1:代表子串的起始位置,如果为正,正数,如果为负,倒数 5:代表字串的终止位置,只能向右数,可以省略,如果省略就是数 ...

  5. ORACLE SQL单行函数(二)【weber出品必属精品】

    11.dual:虚表,任何用户都可以使用,表结构如下: SQL> desc dual Name Null? Type -------------------------------------- ...

  6. 静默安装ORACLE【weber出品必属精品】

    安装配置系统环境安装linux ,所有服务都不选择,只是选择安装开发工具,不要安装防火墙(当然也可以在后面关闭) 打开终端,执行如下命令,检查安装包,没有的都要安装 make, glibc, liba ...

  7. 创建存储过程和函数【weber出品必属精品】

    一.什么是存储过程和函数 1. 是被命名的pl/sql块 2. 被称之为pl/sql子程序 3. 与匿名块类似,有块结构: 声明部分是可选的(没有declare关键字) 必须有执行部分 可选的异常处理 ...

  8. 全世界最详细的图形化VMware中linux环境下oracle安装(三)【weber出品必属精品】

    数据库软件和数据库都建好了,基本上可以说完成90%的工作,但是美中不足的就是企业管理器还没有安装好,现在我们就开始安装企业管理器吧. 安装之前我们先将补丁给补上.补丁我们也是采用禁默安装.补丁:p83 ...

  9. linux删除ORACLE【weber出品必属精品】

    关闭数据库 sqlplus / as sysdba shutdown abort 清除oracle软件 su - oracle cd $ORACLE_BASE rm -rf * rm -rf /etc ...

随机推荐

  1. SignalR2.0开发实例之——创建房间聊天

    SignalR作为一个强大的集线器,已经在hub里面集成了Gorups,也就是分组管理,使用方法如下: //作用:将连接ID加入某个组 //Context.ConnectionId 连接ID,每个页面 ...

  2. js获取url的各项参数

    function getQueryStringArgs() { //取得查询字符串并去掉开头的问号 var qs = location.search.length > 0 ? location. ...

  3. js函数的各种写法与调用

    以下是我见过的各种js函数的各种写法以及调用,虽然有些写法及其调用我不清楚其专业术语叫啥,但并不影响我写一个总结笔记. 我们刚开始接触js语音,经常看到的这种名叫“使用function关键字来定义函数 ...

  4. 菜鸟做HTML5小游戏 - 翻翻乐

    记录下开放过程.做小游戏开发,又要跨平台,flash又不支持iPhone,html5是最好的选择. 先看看最后效果: 好了,开始demo. 1.准备工作: 图片素材(省略...最后代码一起打包) 了解 ...

  5. 关于t分布的证明

  6. Netbeans 注释模板配置

    工具->模板->展开Java 选中Java类->在编辑器中打开 修改如下: <#if package?? && package != ""& ...

  7. PYTHON线程知识再研习E---条件变量同步Condition

    Python提供的Condition对象提供了对复杂线程同步问题的支持.Condition被称为条件变量,除了提供与Lock类似的 acquire和release方法外,还提供了wait和notify ...

  8. CentOs6.5中安装和配置vsftp简明

    这篇文章主要介绍了CentOs6.5中安装和配置vsftp简明教程,需要的朋友可以参考下     一.vsftp安装篇 复制代码代码如下: # 安装vsftpdyum -y install vsftp ...

  9. JS监听组合按键

    有些时候,我们需要在网页上,增加一些快捷按键,方便用户使用一些常用的操作,比如:保存,撤销,复制.粘贴等等. 下面简单梳理一下思路: 我们所熟悉的按键有这么集中类型: 单独的按键操作,如:delete ...

  10. 转:DesiredCapabilities内容详解--Appium服务关键字

    ## Appium 服务关键字 <expand_table> |关键字|描述|实例| |----|-----------|-------| |`automationName`|你想使用的自 ...