mysql学习-mysql聚合函数和分组统计

一、聚合函数

  聚合函数。称为统计函数

  常用的聚合函数

  count()总量数

  max()最大值

  min()最小值

  sum()和

  avg()平均值

  例:查询部门30的总人数(查询总人数,根据empno编号确定有多少编号,就有多个人)

  select count(empno)from emp where deptno=30; count()括号是统计总数量,必须要传的

    ⚠️聚合函数在统计时会忽略null值。

    

  select sum(sal)where emp where deptno=10;

  select avg(sal) where emp where deptno=10;

  例:查询部门30的最高工资、最低工资、平均工资

  select max(sal),min(sal),avg(sal)from emp where deptno = 30;

二、分组统计

  语法:

    select 列名1 别名1,列名2 别名2...

    from 表名1 别名1 inner join 表名2 别名2 on 多表间的关联关系

    where 条件(分组之前的条件)

    group by 分组列

    having (分组之后的条件)

    order by 排序1 asc|desc,排列2 asc|desc....;

  举例:

    查询每个部门的平均工资

    select deptno,avg(sal)

    from emp

    group by deptno;

    select  dname ,avg(sal)

    from emp e,dept d

    where e.empno  = d.depno

    group by d.dname

    ⚠️:在mysql中分组统计时可以查出分组列的其他列,而在orcal中不行

      建议将要查询出的列使用分组列

    查询出部门的名称以及每个部门的员工数量

    select d.dname,count(e.empno)

    from dept d left join emp e on d.deptno = e.deptno

    group by d.dname

    查询平均工资大于2000的部门的编号或者平均工资

    select deptno , avg(sal)from emp group by deptno having avg(sal)>2000;

    查询出非销售人员的职位名称,以及从事同一工作的雇员的月工资综合,并且满足工资综合大于5000,查询结构按照月工资综合生序排序

     解题思路:

          1、先写出整体的关键字出来

          2、思考需要查询几张表,把可能查询的表下载from 后。  只查询emp表

          3、考虑有没有分组之前的条件, 非销售人员的职位。 job!=‘salesman’

          4、思考需要按照什么分组。  按照job分组

          5、思考分组后的条件。 满足工资综合大于5000.  sum(sal)>5000

          6、升序排序

    select job ,sum(sal) sum

    from emp

    where job!='salesman'

    group by job

    having sum(sal)>5000

    order by  sum

    

原文地址:https://www.cnblogs.com/jiliangceshi/p/12869418.html