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;

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/joeshang/p/10746800.html
Copyright © 2011-2022 走看看