当前位置:  数据库>oracle

Oracle多行函数(组函数)

    来源: 互联网  发布时间:2017-05-31

    本文导语: 作用于多条数据 返回一条数据 SQL> --工资总额SQL> select sum(sal) from emp;SQL> --员工人数SQL> select count(*) from emp;SQL> --平均工资SQL> select sum(sal)/count(*) 一, avg(sal) 二 from emp;SQL> --平均奖金SQL> select sum(comm)/count(*) 一, sum(comm)/count(comm) 二, avg...

作用于多条数据 返回一条数据

SQL> --工资总额
SQL> select sum(sal) from emp;
SQL> --员工人数
SQL> select count(*) from emp;
SQL> --平均工资
SQL> select sum(sal)/count(*) 一, avg(sal) 二 from emp;
SQL> --平均奖金
SQL> select sum(comm)/count(*) 一, sum(comm)/count(comm) 二, avg(comm) 三 from emp;

        一        二        三                                               
---------- ---------- ----------                                               
157.142857        550        550                                               

SQL> --空值 4. 组函数会自动滤空
SQL> select count(*),count(comm) from emp;

  COUNT(*) COUNT(COMM)                                                         
---------- -----------                                                         
        14          4     
SQL> select count(*),count(nvl(comm,0)) from emp;

  COUNT(*) COUNT(NVL(COMM,0))                                                 
---------- ------------------                                                 
        14                14   
SQL> --可以在组函数中嵌套滤空函数,来屏蔽组函数的滤空功能

 

SQL> --求各个部门的平均工资
SQL> select deptno,avg(sal)
  2  from emp
  3  group by deptno;
group by depnto
SQL> --语法
SQL> select deptno,job,avg(sal)
  2  from emp
  3  group by depnto;
group by depnto
        *
第 3 行出现错误:
ORA-00904: "DEPNTO": 标识符无效
SQL>--在Oracle中所有没有被组函数包括的列 必须出现在group by的后面 
SQL> --group by多列:先按照第一列分;如果第一列相同,再按照第二列分
SQL> ed
已写入 file afiedt.buf

  1  select deptno,job,avg(sal)
  2  from emp
  3  group by deptno,job
  4* order by 1
SQL> /

    DEPTNO JOB        AVG(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        10 CLERK          1300                                                                                                                     
        10 MANAGER        2450                                                                                                                     
        10 PRESIDENT      5000                                                                                                                     
        20 ANALYST        3000                                                                                                                     
        20 CLERK            950                                                                                                                     
        20 MANAGER        2975                                                                                                                     
        30 CLERK            950                                                                                                                     
        30 MANAGER        2850                                                                                                                     
        30 SALESMAN        1400                                                                                                                     

已选择9行。


SQL> --按部门,不同的职位统计平均工资
SQL> --having
SQL> --查询平均工资大于2000的部门
SQL> ed
已写入 file afiedt.buf

  1  select deptno,avg(sal)
  2  from emp
  3  group by deptno
  4* having avg(sal)>2000
SQL> /
SQL> --having 过滤分组
SQL> --having和where的区别
SQL> --求10号部门的平均工资
SQL> select deptno,avg(sal)
  2  from emp
  3  group by deptno
  4  having deptno=10;

    DEPTNO  AVG(SAL)                                                                                                                               
---------- ----------                                                                                                                               
        10 2916.66667                                                                                                                               

SQL> select deptno,avg(sal)
  2  from emp
  3  where deptno=10
  4  group by deptno;

    DEPTNO  AVG(SAL)                                                                                                                               
---------- ----------                                                                                                                               
        10 2916.66667   
SQL> --SQL优化  3. 尽量使用where
SQL> --            例外:如果条件中含义组函数,只能使用having

制作报表是的group by 语句增强

SQL> --group by的增强
SQL> /*
SQL> group by deptno,job
SQL> +
SQL> group by deptno
SQL> +
SQL> group by null
SQL>
SQL> =
SQL>
SQL> group by rollup(deptno,job)
SQL> group by rollup(a,b)
SQL> =
SQL> group by a,b
SQL> +
SQL> group by a
SQL> +
SQL> group by null
SQL>
SQL> */

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        10 CLERK          1300                                                                                                                     
        10 MANAGER        2450                                                                                                                     
        10 PRESIDENT      5000                                                                                                                     
        10                8750                                                                                                                     
        20 CLERK          1900                                                                                                                     
        20 ANALYST        6000                                                                                                                     
        20 MANAGER        2975                                                                                                                     
        20                10875                                                                                                                     
        30 CLERK            950                                                                                                                     
        30 MANAGER        2850                                                                                                                     
        30 SALESMAN        5600                                                                                                                     

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        30                9400                                                                                                                     
                          29025                                                                                                                     

已选择13行。
SQL> --SQLPLUS支持报表功能
SQL> break on deptno skip 2
SQL> select deptno,job,sum(sal)
  2  from emp
  3  group by rollup(deptno,job);

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        10 CLERK          1300                                                                                                                     
          MANAGER        2450                                                                                                                     
          PRESIDENT      5000                                                                                                                     
                          8750                                                                                                                     
                                                                                                                                                     
                                                                                                                                                     
        20 CLERK          1900                                                                                                                     
          ANALYST        6000                                                                                                                     
          MANAGER        2975                                                                                                                     
                          10875                                                                                                                     
                                                                                                                                                     

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
                                                                                                                                                     
        30 CLERK            950                                                                                                                     
          MANAGER        2850                                                                                                                     
          SALESMAN        5600                                                                                                                     
                          9400                                                                                                                     
                                                                                                                                                     
                                                                                                                                                     
                          29025                                                                                                                     
                                                                                                                                                     
                                                                                                                                                     

已选择13行。

SQL> break on null
SQL> /

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        10 CLERK          1300                                                                                                                     
        10 MANAGER        2450                                                                                                                     
        10 PRESIDENT      5000                                                                                                                     
        10                8750                                                                                                                     
        20 CLERK          1900                                                                                                                     
        20 ANALYST        6000                                                                                                                     
        20 MANAGER        2975                                                                                                                     
        20                10875                                                                                                                     
        30 CLERK            950                                                                                                                     
        30 MANAGER        2850                                                                                                                     
        30 SALESMAN        5600                                                                                                                     

    DEPTNO JOB        SUM(SAL)                                                                                                                     
---------- --------- ----------                                                                                                                     
        30                9400                                                                                                                     
                          29025                                                                                                                     

已选择13行。


    
 
 

您可能感兴趣的文章:

  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起
  • Oracle 多行记录合并/连接/聚合字符串的几种方法
  • Oracle 系统变量函数介绍
  • Oracle 系统变量函数用法指南
  • Oracle中decode函数的用法
  • Oracle round()函数与trunc()函数区别介绍
  • oracle中lpad函数的用法详解
  • MySQL实现类似Oracle中的decode()函数的功能
  • Oracle函数substr(str1, pos, [len])
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • SQL中Charindex和Oracle中对应的函数Instr对比
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • Oracle Max函数使用中出现的问题
  • oracle合并列的函数wm_concat的使用详解
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • c#中oracle to_date函数用法举例
  • Oracle 函数用法之decode
  • Oracle过程与函数的区别分析
  • Oracle层次查询和with函数的使用示例
  • oracle的nvl函数的使用介绍
  • c#中oracle的to_date函数使用方法
  • Oracle中nul()函数
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • ORACLE日期相关操作
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE数据库常用字段数据类型介绍
  • Linux系统下Oracle的启动与Oracle监听的启动
  • Oracle 12c的九大最新技术特性介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • ORACLE中DBMS_RANDOM随机数生成包
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,