目录
Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
group by 子句是在 where子句之后运行的,所以在使用时可以进行限定查询,也可以进行多表查询
查询每个部门的名称、部门人数、平均工资
● 确定要使用的数据表
dept 表:部门名称。
emp 表:统计数据。● 确定已知的关联字段
员工与部门: emp.deptno=dept.deptno。
第一步:查询出每个部门的名称、员工编号、基本工资
SQL> select d.dname,e.empno,e.sal
2 from emp e,dept d
3 where e.deptno=d.deptno;
DNAME EMPNO SAL
---------------------------- ---------- ----------
ACCOUNTING 7839 5000
ACCOUNTING 7782 2450
ACCOUNTING 7934 1300
RESEARCH 7902 3000
RESEARCH 7369 800
RESEARCH 7566 2975
SALES 7900 950
SALES 7844 1500
SALES 7654 1250
SALES 7521 1250
SALES 7499 1600
SALES 7698 2850
第二步:此时的查询结果中,部门名称部分出现了重复的内容
按照分组来说,只要是出现了数据的重复,那么就可以进行分组,只不过此时的分组是针对临时表(查询结果)的
既然已经确定了 dname 上存在重复记录,那么就直接对 dname 分组即可
SQL> select d.dname,count(e.empno),avg(e.sal)
2 from emp e,dept d
3 where e.deptno=d.deptno
4 group by d.dname;
DNAME COUNT(E.EMPNO) AVG(E.SAL)
---------------------------- -------------- ----------
RESEARCH 3 2258.33333
SALES 6 1566.66667
ACCOUNTING 3 2916.66667
第三步:在 dept 表中实际上存在 4 个部门的信息,而此时的要求也是统计所有的部门名称,
根据前面介绍的情况,如果发现数据不完整,立刻使用外连接
SQL> select d.dname,count(e.empno),avg(e.sal)
2 from emp e,dept d
3 where e.deptno(+)=d.deptno
4 group by d.dname;
DNAME COUNT(E.EMPNO) AVG(E.SAL)
---------------------------- -------------- ----------
RESEARCH 3 2258.33333
SALES 6 1566.66667
ACCOUNTING 3 2916.66667
OPERATIONS 0
查询每个部门的编号、名称、位置、部门人数、平均工资
● 确定要使用的数据表
dept 表:编号、名称、位置
emp 表:统计信息● 确定已知的关联字段
员工与部门: emp.deptno=dept.deptno。
第一步:查询出每个部门的编号、名称、位置、员工编号、工资
SQL> select d.deptno,d.dname,d.loc,e.empno,e.sal
2 from emp e,dept d
3 where e.deptno(+)=d.deptno;
DEPTNO DNAME LOC EMPNO SAL
---------- ---------------------------- -------------------------- ---------- ----------
10 ACCOUNTING NEW YORK 7839 5000
10 ACCOUNTING NEW YORK 7782 2450
10 ACCOUNTING NEW YORK 7934 1300
20 RESEARCH DALLAS 7902 3000
20 RESEARCH DALLAS 7369 800
20 RESEARCH DALLAS 7566 2975
30 SALES CHICAGO 7900 950
30 SALES CHICAGO 7844 1500
30 SALES CHICAGO 7654 1250
30 SALES CHICAGO 7521 1250
30 SALES CHICAGO 7499 1600
30 SALES CHICAGO 7698 2850
40 OPERATIONS BOSTON
第二步:此时发现有 3 个列(dept 表)同时发生着重复,那么就可以进行多字段分组
SQL> select d.deptno,d.dname,d.loc,count(e.empno),avg(e.sal)
2 from emp e,dept d
3 where e.deptno(+)=d.deptno
4 group by d.deptno,d.dname,d.loc;
DEPTNO DNAME LOC COUNT(E.EMPNO) AVG(E.SAL)
---------- ---------------------------- -------------------------- -------------- ----------
10 ACCOUNTING NEW YORK 3 2916.66667
20 RESEARCH DALLAS 3 2258.33333
30 SALES CHICAGO 6 1566.66667
40 OPERATIONS BOSTON 0