如題:
查詢出部門名稱、部門的員工數、部門的平均工資、部門的最低收入雇員姓名和最高收入雇員的姓名
這是oracle的默認Scott用戶下面的emp 和 dept 表間的一道思考題。
記錄了每個雇員的基本信息
NO 字段 類型 描述
1 empno Number(4) 雇員編號
2 ename Varchar2(10) 雇員姓名
3 job Varchar2(9) 工作職位
4 mgr Number(4) 雇員的領導(經理)編號
5 hierdate date 入職日期
6 sal Number(7,2) 月薪/工資
7 comm Number(7,2) 獎金
8 deptno Number(2) 雇員所屬部門的編號
記錄了每個部門的基本信息
NO 字段 類型 描述
1 deptno Number(2) 部門編號(唯一)
2 dname Varchar2(14) 部門名稱
3 loc Varchar2(13) 地址
分析:要查詢出部門的員工數,平均工資,最低收入雇員姓名和最高收入雇員姓名,必須先知道部門的最高收入和最低收入
第一步:查詢出部門名稱,部門員工數,部門平均工資,部門最低收入和最高收入
select deptno, count(*), avg(sal), min(sal), max(sal) from emp group by deptno;
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KCjxwPrXatv6yvaO6sunRr9futc3K1cjr1d+1xNDVw/s8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:sql;">select e.ename from emp e, (select deptno, count(*), avg(sal), min(sal) min_sal, max(sal) max_sal from emp group by deptno) t where e.deptno = e.deptno and (e.sal = min_sal);
同理,也可以查詢最高收入者的姓名
select e.ename from emp e, (select deptno, count(*), avg(sal), min(sal) min_sal, max(sal) max_sal from emp group by deptno) t where e.deptno = e.deptno and (e.sal = max_sal);
那如何同時查詢最低收入者和最高收入者的姓名呢?
第三步:給第一次查詢出來的部門最高收入和最低收入同時關聯兩張emp 表,分別獲取最高收入者和最高收入者的姓名
select d.dname, t.nu, t.avg_sal, t.min_sal, t.max_sal, e.ename, s.ename from dept d, emp e, emp s , (select deptno, count(*) nu, avg(sal) avg_sal, min(sal) min_sal, max(sal) max_sal from emp group by deptno) t where d.deptno = t.deptno and (e.deptno = t.deptno and e.sal = t.min_sal) and (s.deptno = t.deptno and s.sal = t.max_sal);