zoukankan      html  css  js  c++  java
  • Oracle学习<五>

    求部门平均薪水的等级

    • A.求部门平均薪水的等级。

    select deptno,avg_sal,grade from
    (select deptno,avg(sal) avg_sal from emp group by deptno)t
    join salgrade s on(t.avg_sal between s.losal and s.hisal)

    • B.求部门平均的薪水等级

    select deptno,avg(grade) from
    (select deptno,ename, grade from emp join salgrade s on(emp.sal between s.losal and
    s.hisal)) t
    group by deptno

    • C.那些人是经理

    select ename from emp where empno in(select mgr from emp);
    select ename from emp where empno in(select distinct mgr from emp);

    • D.不准用组函数,求薪水的最高值(面试题)


    select distinct sal from emp where sal not in(
    select distinct e1.sal from emp e1 join emp e2 on (e1.sal<e2.sal));

    • E.平均薪水最高的部门编号


    select deptno,avg_sal from
    (select avg(sal)avg_sal,deptno from emp group by deptno)
    where avg_sal=
    (select max(avg_sal)from
    (select avg(sal) avg_sal,deptno from emp group by deptno)
    )

    • F.平均薪水最高的部门名称

    select dname from dept where deptno=
    (
    select deptno from
    (select avg(sal)avg_sal,deptno from emp group by deptno)
    where avg_sal=
    (select max(avg_sal)from
    (select avg(sal) avg_sal,deptno from emp group by deptno)
    )
    )

    • G.求平均薪水的等级最低的部门的部门名称


    组函数嵌套
    如:平均薪水最高的部门编号,可以E.更简单的方法如下:
    select deptno,avg_sal from
    (select avg(sal) avg_sal,deptno from emp group by deptno)
    where avg_sal =
    (select max(avg(sal)) from emp group by deptno)

     

    组函数最多嵌套两层

    分析:
    首先求
    1.平均薪水: select avg(sal) from group by deptno;

    2.平均薪水等级: 把平均薪水当做一张表,需要和另外一张表连接salgrade
    select deptno,grade avg_sal from
    ( select deptno,avg(sal) avg_sal from emp group by deptno) t
    join salgrade s on(t.avg_sal between s.losal and s.hisal)

    上面结果又可当成一张表。

    DEPTNO GRADE AVG_SAL
    -------- ------- ----------
    30 3 1566.66667
    20 4 2175
    10 4 2916.66667

    3.求上表平均等级最低值

    select min(grade) from
    (
    select deptno,grade,avg_sal from
    (select deptno,avg(sal) avg_sal from emp group by deptno)t
    join salgrade s on(t.avg_sal between s.losal and s.hisa)
    )

    4.把最低值对应的2结果的那张表的对应那张表的deptno, 然后把2对应的表和另外一张表做连接。

    select dname ,deptno,grade,avg_sal from
    (
    select deptno,grade,avg_sal from
    (select deptno,avg(sal) avg_sal from emp group by deptno)t
    join salgrade s on(t.avg_sal between s.losal and s.hisal)
    ) t1
    join dept on (t1.deptno = dept.deptno)
    where t1.grade =
    (
    select deptno,grade,avg_sal from
    (select deptno,avg(sal) avg_sal from emp group by deptno) t
    join salgrade s on(t.avg_sal between s.losal and s.hisal)
    )
    )
    结果如下:

    DNAME DEPTNO GRADE AVG_SAL
    -------- ------- -------- --------
    SALES 30 3 1566.6667


    • H: 视图(视图就是一张表,一个字查询)


    G中语句有重复,可以用视图来简化。
    conn sys/bjsxt as sysdba;
    grant create table,create view to scott;
    conn scott/tiger
    创建视图:
    create view v$_dept_avg-sal_info as
    select deptno,grade,avg_sal from
    ( select deptno,avg(sal) avg_sal from emp group by deptno)t
    join salgrade s on 9t.avg_sal between s.losal and s.hisal)

    然后
    select * from v$_dept_avg-sal_info

    结果如下:
    DEPTNO GRADE AVG_SAL
    -------- ------- ----------
    30 3 1566.66667
    20 4 2175
    10 4 2916.66667

    然后G中查询可以简化成:
    select dname,t1.deptno,grade,avg_sal from
    v$_dept_avg-sal_info t1
    join dept on9t1.deptno =dept.deptno)
    where t1.grade=
    (
    select min(grade) from v$_dept_avg-sal_info t1
    )

  • 相关阅读:
    jquery.tmpl.js 模板引擎用法
    var 的使用
    BUG集锦
    jquery Ajax异步请求之session
    找到多个与名为“Login”的控制器匹配的类型
    蒙板 模态对话框
    mvc通过ActionFilterAttribute做登录检查
    MVC 分页
    MVC 创建线程内的db单例
    Servlet生命周期中的service方法分析
  • 原文地址:https://www.cnblogs.com/elleniou/p/2628460.html
Copyright © 2011-2022 走看看