SQL查询系列之七:SQL分组查询

有些话、适合烂在心里 提交于 2019-12-09 12:58:54

很多情况下,我们需要进行一些汇总操作,比如统计整个公司的人数或者统计每个部门的人数,这个时就要用到SQL的分组查询,又称为聚合查询

聚合操作的语法如下:

SELECT [field1,field2,……fieldn] fun_name

FROM tablename

[WHERE where_contition]

[GROUP BY field1,field2,……fieldn

[WITH ROLLUP]]

[HAVING where_contition]

对其参数进行以下说明。

¡  fun_name表示要做的聚合操作,也就是聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。

¡  GROUP BY关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by后面。

¡  WITH ROLLUP是可选语法,表明是否对分类聚合后的结果进行再汇总。

¡  HAVING关键字表示对分类后的结果再进行条件的过滤。

注意:having和where的区别在于having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。

 

示例:要emp表中统计总人数:

SQL> SELECT COUNT(1) FROM emp;

  COUNT(1)

----------

        14

 

示例:在此基础上,要统计各个部门的人数。

SQL> SELECT deptno,count(1) FROM emp GROUP BY deptno;

DEPTNO   COUNT(1)

------ ----------

    30          6

    20          5

    10          3

 

示例:统计人数大于3人的部门。

SQL> SELECT deptno,count(1) FROM emp GROUP BY deptno HAVING COUNT(1)>3;

DEPTNO   COUNT(1)

------ ----------

    30          6

    20          5

 

示例:统计emp表所有员工的工资总额、最高和最低工资。

SQL>  SELECT SUM(sal),MAX(sal),MIN(sal) FROM emp;

  SUM(SAL)   MAX(SAL)   MIN(SAL)

---------- ---------- ----------

     29025       5000        800

 

示例:统计emp表所部门编号为10和各职位人数。

SQL>  SELECT job,count(1)

  2   FROM emp

  3  WHERE deptno=10

  4   GROUP BY job

  5  ORDER BY job;

JOB         COUNT(1)

--------- ----------

CLERK              1

MANAGER            1

PRESIDENT          1

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!