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

不少状况下,咱们须要进行一些汇总操做,好比统计整个公司的人数或者统计每一个部门的人数,这个时就要用到SQL的分组查询,又称为聚合查询函数

聚合操做的语法以下:code

SELECT [field1,field2,……fieldn] fun_nameget

FROM tablenameit

[WHERE where_contition]io

[GROUP BY field1,field2,……fieldntable

[WITH ROLLUP]]效率

[HAVING where_contition]基础

对其参数进行如下说明。语法

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

¡  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

相关文章
相关标签/搜索