Oracle分组函数

简介: SQL> --avg,count,max,min,sum举例 SQL> --统计员工个数 SQL> select count(*) from emp;   COUNT(*)                                                                                                  

SQL> --avg,count,max,min,sum举例
SQL> --统计员工个数
SQL> select count(*) from emp;

  COUNT(*)                                                                                                             
----------                                                                                                             
        15                                                                                                             

SQL> --求平均工资,最高工资,最低工资,工资总额
SQL> select avg(sal) 平均工资,max(sal) 最高工资,min(sal) 最低工资,sum(sal) 工资总额
  2  from emp;

  平均工资   最高工资   最低工资   工资总额                                                                            
---------- ---------- ---------- ----------                                                                            
2073.21429       5000        800      29025                                                                            

SQL> select count(*), count(empno),count(comm) from emp;

  COUNT(*) COUNT(EMPNO) COUNT(COMM)                                                                                    
---------- ------------ -----------                                                                                    
        15           15           4                                                                                    

SQL> --分组函数会自动去掉结果集中的null值,然后在做计算
SQL> --分组数据: group by
SQL> --求每个部门的员工数
SQL> select deptno,count(*)
  2  from emp
  3  group by deptno;

    DEPTNO   COUNT(*)                                                                                                  
---------- ----------                                                                                                  
        30          6                                                                                                  
                    1                                                                                                  
        20          5                                                                                                  
        10          3                                                                                                  

SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                  
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                  
      7369 SMITH      CLERK           7902 17-12月-80       800                    20                                  
      7499 ALLEN      SALESMAN        7698 20-2月 -81      1600        300         30                                  
      7521 WARD       SALESMAN        7698 22-2月 -81      1250        500         30                                  
      7566 JONES      MANAGER         7839 02-4月 -81      2975                    20                                  
      7654 MARTIN     SALESMAN        7698 28-9月 -81      1250       1400         30                                  
      7698 BLAKE      MANAGER         7839 01-5月 -81      2850                    30                                  
      7782 CLARK      MANAGER         7839 09-6月 -81      2450                    10                                  
      7788 SCOTT      ANALYST         7566 13-7月 -87      3000                    20                                  
      7839 KING       PRESIDENT            17-11月-81      5000                    10                                  
      7844 TURNER     SALESMAN        7698 08-9月 -81      1500          0         30                                  
      7876 ADAMS      CLERK           7788 13-7月 -87      1100                    20                                  

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO                                  
---------- ---------- --------- ---------- -------------- ----- ---------- ----------                                  
      7900 JAMES      CLERK           7698 03-12月-81       950                    30                                  
      7902 FORD       ANALYST         7566 03-12月-81      3000                    20                                  
      7934 MILLER     CLERK           7782 23-1月 -82      1300                    10                                  
      1234 Tom_123                                                                                                     

已选择15行。

SQL> delete from emp where empno=1234;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select deptno,count(*)
  2  from emp
  3  group by deptno;

    DEPTNO   COUNT(*)                                                                                                  
---------- ----------                                                                                                  
        30          6                                                                                                  
        20          5                                                                                                  
        10          3                                                                                                  

SQL> ed
已写入 file afiedt.buf

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

    DEPTNO   COUNT(*)                                                                                                  
---------- ----------                                                                                                  
        10          3                                                                                                  
        20          5                                                                                                  
        30          6                                                                                                  

SQL> --group by作用于多列
SQL> --统计各部门员工的人数,要求不各部门按工种统计
SQL> select deptno,job,count(*)
  2  from emp
  3  group by deptno,job;

    DEPTNO JOB         COUNT(*)                                                                                        
---------- --------- ----------                                                                                        
        20 CLERK              2                                                                                        
        30 SALESMAN           4                                                                                        
        20 MANAGER            1                                                                                        
        30 CLERK              1                                                                                        
        10 PRESIDENT          1                                                                                        
        30 MANAGER            1                                                                                        
        10 CLERK              1                                                                                        
        10 MANAGER            1                                                                                        
        20 ANALYST            2                                                                                        

已选择9行。

SQL> ed
已写入 file afiedt.buf

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

    DEPTNO JOB         COUNT(*)                                                                                        
---------- --------- ----------                                                                                        
        10 CLERK              1                                                                                        
        10 MANAGER            1                                                                                        
        10 PRESIDENT          1                                                                                        
        20 ANALYST            2                                                                                        
        20 CLERK              2                                                                                        
        20 MANAGER            1                                                                                        
        30 CLERK              1                                                                                        
        30 MANAGER            1                                                                                        
        30 SALESMAN           4                                                                                        

已选择9行。

SQL> ed
已写入 file afiedt.buf

  1  select deptno,job,count(*)
  2  from emp
  3  group by deptno
  4* order by 1
SQL> /
select deptno,job,count(*)
              *
第 1 行出现错误:
ORA-00979: 不是 GROUP BY 表达式


SQL> --查询部门人数大于3的部门
SQL> select deptno, count(*)
  2  from emp
  3  group by deptno
  4  having count(*)>3;

    DEPTNO   COUNT(*)                                                                                                  
---------- ----------                                                                                                  
        30          6                                                                                                  
        20          5                                                                                                  

SQL> --having: 在分组的基础上,再对结果集进行筛选
SQL> --group by的增强:
SQL> --语法格式: group by rollup(a,b)
SQL> /*
SQL> group by rollup(deptno,job)
SQL> 等同于:
SQL> group by deptno,job
SQL> +
SQL> group by deptno
SQL> +
SQL> group by null*/
SQL>
SQL> select deptno,job,sum(sal)
  2  from emp
  3  group by rollup(deptno,job);

    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> break on deptno skip 2
SQL> --break on deptno:不同的部门号才显示
SQL> --skip 2:不同的部门号之间空两行
SQL> /

    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> spool off

目录
相关文章
|
SQL Oracle 算法
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
353 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
SQL 存储 Oracle
【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写
【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
303 0
|
SQL Oracle 关系型数据库
Oracle|内置函数之INSTR
【7月更文挑战第5天】
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库 数据挖掘
|
NoSQL Oracle 关系型数据库
MongoDB与Oracle:管道函数兼容之道
【4月更文挑战第20天】
331 2
|
Oracle 关系型数据库 数据管理
Oracle常用系统函数之日期和时间类函数:时空穿梭者的魔法棒
【4月更文挑战第19天】Oracle数据库中的日期和时间函数是强大的工具,如同时空穿梭者的魔法棒。`SYSDATE`和`CURRENT_TIMESTAMP`能显示当前时间,助你在数据中记录关键时刻;`ADD_MONTHS`函数让你轻易跃过月份,实现时间穿越;而`TO_DATE`和`TO_CHAR`则负责日期和时间的格式转换,如同时间的化妆师。除此之外,还有`EXTRACT`、`LAST_DAY`等更多魔法道具,帮助数据管理专家们自如操控时间,解决各种挑战。掌握这些函数,你也能在数据世界中自由穿梭!
|
Oracle 算法 关系型数据库
Oracle常用系统函数之数字类函数:数字的魔术师
【4月更文挑战第19天】Oracle数据库中的数字类函数是数字处理的魔术师,包括`ROUND`(四舍五入),`CEIL`和`FLOOR`(向上/下取整),以及`ABS`(计算绝对值)。还有`MOD`、`TRUNC`和`POWER`等函数,提供求余数、截断和计算幂的功能。熟练运用这些函数能提升数据管理效率,让处理数字变得更简单、有趣。

推荐镜像

更多