zoukankan      html  css  js  c++  java
  • 08-oracle统计函数(单组分组函数)

    --count时尽量count(列名),count(*)也可以。

    --count,max,min,sum,avg,median(中位数)

    select count(empno),count(distinct job),max(hiredate),min(hiredate),sum(sal),round(avg(sal),2)
    from emp;

    --median:中位数(中间值),一组按大小顺序排列的数据,处于中间位置的数。
    --行数为奇数时取中间行的数值(19行/2取9行的值),偶数时取中间2行数值的平均值(若18行则中位数的值为(9行+10行)除以2)。
    --如sal共15行,第8行即中位数(中间值)
    select median(sal) from emp;

    --使用group by统计每个部门的人数
    select deptno,count(deptno)
    from emp
    where deptno is not null
    group by deptno;

    --group by 以职位分组,查询出每个职位的最低和最高工资
    select job,min(sal),max(sal)
    from emp
    group by job;

    --数据统计时,语句中没有group by时,select的选项只能出现统计函数(count(),sum(),max(),min(),avg());

    --数据统计时,语句中有group by时,select的选项只能出现统计函数和group by排序使用的分组字段(即列名);

    select job,count(ename) from emp group by job;

    --数据统计时,使用嵌套函数时,无论与剧中有没有group by ,select选项中只允许出现嵌套行数,其它字段均不允许出现。

    --重复的列可以进行分组(GROUP BY),SQL语句执行顺序为FROM,WHRER,GROUP BY,SELECT,ORDER BY
    --查询部门名称,部门人数,平均工资,平均工作年限
    SELECT D.DNAME 部门名称,count(ename)部门人数,ROUND(AVG(SAL),2)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工作年限
    FROM EMP E FULL OUTER JOIN DEPT D ON( E.DEPTNO=D.DEPTNO)
    GROUP BY D.DNAME;

    --查询工资各个等级工资的雇员人数,平均工资
    SELECT TRIM(S.GRADE),DECODE(S.GRADE,1,'A',2,'B',3,'C',4,'D',5,'E') 工资等级,COUNT(E.ENAME) 雇员人数,ROUND(AVG(E.SAL),2) 平均工资
    FROM EMP E,SALGRADE S
    WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
    GROUP BY S.GRADE
    ORDER BY 工资等级

    --查询领取佣金和不领取佣金的平均工资,平均工作年限,雇员人数
    SELECT '不领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数
    FROM EMP E WHERE E.COMM IS NULL
    UNION
    SELECT '领取佣金',AVG(SAL)平均工资,ROUND(AVG(MONTHS_BETWEEN(SYSDATE,HIREDATE)/12),2)平均工资年限,COUNT(EMPNO)雇员人数
    FROM EMP E WHERE E.COMM IS NOT NULL;

    --多字段分组

    --GROUP BY 字段1,字段2
    --查询部门详细信息:部门名称,部门编号,部门位置,平均工资,总工资,雇员人数

    SELECT D.DNAME,D.DEPTNO,D.LOC,ROUND(AVG(E.SAL),2),SUM(SAL),COUNT(E.ENAME)
    FROM DEPT D,EMP E
    WHERE D.DEPTNO=E.DEPTNO(+)
    GROUP BY D.DNAME,D.DEPTNO,D.LOC;

    --HAVING 必须和GROUP BY一起使用
    --查询所有平均工资大于2000的职位信息,平均工资,雇员人数
    SELECT E.JOB,ROUND(AVG(SAL),2),COUNT(E.ENAME)
    FROM EMP E
    GROUP BY E.JOB
    HAVING AVG(SAL)>2000;

    --查询不包含销售的的工作名称,从事同一工作的雇员工资总和,且工资大于5000,并按照从低到高排序 

    select E.JOB,SUM(E.SAL) A
    from emp e
    where e.job !='SALESMAN'
    GROUP BY E.JOB
    HAVING SUM(E.SAL)>5000
    ORDER BY A DESC;

  • 相关阅读:
    高斯核函数的代码体现
    程序编译
    DoH
    随笔1
    获取节点值的方式
    DOM解析XML
    URLConnection发送请求,并接收数据
    myeclipse编译后的jsp文件存放位置
    各种中文乱码
    各种提交的区别
  • 原文地址:https://www.cnblogs.com/joeshang/p/10746800.html
Copyright © 2011-2022 走看看