• oracle多表查询(三)


    统计分组函数

     之前介绍了count()函数,他的作用是统计数据量,它是统计函数的一员,常用的统计函数有:

    count()求数据量

    sum()数学求和

    avg()求平均值

    max()求最大值

    min()求最小值

    测试:求公司所有员工的总薪资和每个员工的平均薪资

    select avg(sal) 平均薪资, sum(sal) 总工资 from EMP

    注意 count()函数的返回值永远是数字,其他的统计函数可能会存在返回值为null的情况 但是count()返回得最起码也是0(永远是确切数字)

    分组查询

    当数据重复出现的时候,我们在有分组的必要。例如一群人,按照年龄可以分为18以上和18以下,按性别可以分男女,即为只有数据重复的时候,才分组。

    基本语法:

    select  ~ from ~ where ~ group by ~ order by~;

    范例:按照部门编号分组,求出每个部门的人数,平均工资

    select DEPTNO 部门编号, count(EMPNO) 部门人数,trunc(avg(sal)) 平均薪资 from EMP GROUP BY DEPTNO

    范例:按照职位分组,求出每个职位的最高和最低工资
    SELECT job 职位, max(sal) 最高工资, min(sal) FROM EMP GROUP BY job;

    这里需要注意,分组函数可以不加group by单独使用,但是此时便不允许同时查询其他的属性,例如,我们查询一共有几种工作:
    SELECT count(DISTINCT JOB) FROM EMP

    如果单纯只是多个分组函数的累计也是可以的,例如我们查询一共有多少员工,员工的最高工资,公司第一个员工入职时间:
    select count(EMPNO),max(SAL),min(HIREDATE) FROM EMP;

    但是如果我们要查询,员工的平均工资,所有员工的姓名,这时....

    如果要使用分组函数,那么“select”后面只能追加分组条件的列以及分组函数。

    范例:查询出每个部门的名称、部门的人数、平均工资
    SELECT d.DNAME 部门名称,count(e.EMPNO) 部门人数,coalesce(trunc(avg(e.sal)),0)  平均工资
    FROM DEPT d,EMP e WHERE e.DEPTNO(+)=d.DEPTNO GROUP BY d.DNAME ORDER BY 1;

    范例:要求显示每个部门的编号、名称、位置、部门的人数、平均工资
    SELECT d.DEPTNO 部门编号,d.DNAME 部门名称,d.LOC 部门位置,count(e.EMPNO) 部门员工,coalesce(trunc(avg(e.SAL)),0) 平均工资
    FROM EMP e, DEPT d WHERE e.DEPTNO(+)=d.DEPTNO GROUP BY d.DEPTNO,d.DNAME,d.LOC order by 1;

    由此我们发现,分组条件可以不止一个列,其实 只要部门编号是10的,部门名称一定是C,部门位置一定是地球,由此我们可以把他们三个列看作一个整体进行分组操作


  • 相关阅读:
    UIButton添加倒计时
    AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端
    js脚本都可以放在哪些地方
    js实现整数转化为小数
    JavaBean自动生成get和set方法
    servlet与Javabean之间的区别
    搞不懂SSH与JAVA+Servlet+javabean有什么关系
    启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”的解决方法!
    win8安装sql2008及设置登陆名问题
    jdbc的配置及jdbc连接常用数据库(mysql、sqlserver、Oracle)
  • 原文地址:https://www.cnblogs.com/HUCHEN/p/9985946.html
Copyright © 2020-2023  润新知