oracle(18)_SQL_多表联合查询_分组统计(上)

版权声明:如需转载,请注明出处 https://blog.csdn.net/qq_36260974/article/details/88732300

SQL

多表查询

分组统计

● 分组统计

  • 分组统计需要使用 GROUP BY 来分组
  • 语法:
SELECT * |列名 FROM 表名 {WEHRE 查询条件}   {GROUP BY 分组字段,分组字段1,...} ORDER BY 列名1 ASC|DESC,列名2...ASC|DESC

在这里插入图片描述

  • 范例:查询每个部门的人数

  • 示例图:
    在这里插入图片描述

  • 范例:查询出每个部门的平均工资

  • 示例图:
    在这里插入图片描述

  • 如果我们想查询出来部门编号,和部门下的人数:
    在这里插入图片描述
    出现 ORA-00937 的错误!
    需要添加分组:
    在这里插入图片描述

注意:

  • 如果使用分组函数,SQL 只可以把 GOURP BY 分组条件字段和分组函数查询出来,不能有其他字段。
  • 如果使用分组函数,不使用 GROUP BY 只可以查询出来分组函数的值。
  • 示例图:
    在这里插入图片描述
    在这里插入图片描述
  • 在分组统计的的时候除了分组函数以外,结果列必须是 group by 后面分组的列(后面有的列前面才能有,后面没有前面绝对不能有)。

范例:分组查询每个部门下从事每种工作的人数

  • 示例图:
    在这里插入图片描述

以上操作完整源码:

-- 没分组的大组
select count(empno) from emp;

--由查询结果来看,可以根据部门编号分组
select * from emp order by deptno;

--分组统计人数
select count(empno), deptno from emp group by deptno;

--查询每个部门的平均工资
select avg(empno) avgsal, deptno from emp group by deptno;

select count(*), deptno from emp;
--会报错,因为没有group by分组所以统计函数统计的是整张表的 数据,
--我们却非要强加在部门编号上是不对的,所以想要查询出来部门下的统计信息就必须要分组

--需要添加分组
select count(*), deptno from emp group by deptno;

--分组查询出记录数,部门编号,部门名称
select count(*), d.deptno, d.dname
  from emp e, dept d
 where e.deptno = d.deptno
 group by d.deptno,d.dname;
 
--分组查询每个部门下从事每种工作的人数
 select count(*), deptno, job
   from emp
  group by deptno, job
  order by deptno;

如有错误,欢迎指正!

猜你喜欢

转载自blog.csdn.net/qq_36260974/article/details/88732300