不少状况下,咱们须要进行一些汇总操做,好比统计整个公司的人数或者统计每一个部门的人数,这个时就要用到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 |