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;

  • 相关阅读:
    个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱
    个人永久性免费-Excel催化剂功能第30波-工作表快捷操作(批量创建、命名、排序、工作表目录)
    个人永久性免费-Excel催化剂功能第29波-追加中国特色的中文相关自定义函数
    发现用System.Net.Mail发邮件(代码附后),附件稍微大一点就会造成程序假死. 有没有什么简单的解决办法呢? 多谢!!
    上传文件 获取文件名 --360浏览器
    js中的json对象和字符串之间的转化
    chosen.jquery.js
    select 后台获取text 并根据text 设置value选中项
    iframe中有ajax,设置iframe自适应高度
    charme浏览器 jquery1.9.1min.js 报脚本错误 无jquery.min.map 文件
  • 原文地址:https://www.cnblogs.com/joeshang/p/10746800.html
Copyright © 2011-2022 走看看