分组统计查询

 

统计函数

   统计数量:COUNT(*| 列 |  DISTINCT 列);

   求和:SUM(列);

   平均值:AVG(列);

   最大值:MAX(列),可以在日期或字符串上使用;

   最小值:MIN(列),可以在日期或字符上使用 ;

例:公司工资总和

SELECT SUM(sal)),SUM(sal+NVL(comm,0)) FROM emp ;

 

例:统计公司的平均工资

SELECT AVG(sal) FROM emp;

 

例:统计公司雇佣年限

SELECT AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12) FROM emp;

 

例:求出公司的最高工资与最低工资

SELECT MAX(sal),MIN(sal) FROM emp;

 

例:求出最早和最晚雇佣日期

SELECT MIN(hiredate),MAX(hiredate) FROM emp;

 

分组统计

只有两个列有重复才可以分组,SQL之中如果想要实现分组使用GROUP BY子句实现,语法如下

 

④SELECT 分组字段,统计函数【别名】,统计函数【别名】,....

①FROM 数据表 【别名】

②【WHERE 参与运算的数据行的筛选条件(s)】

③【GROUP BY 分组字段】

⑤【ORDER BY 排序字段 【ASC | DESC】】

例:统计出每个职位的人数,平均工资,平均雇佣年限

SELECT job,COUNT(*),AVG(sal),AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12)
FROM emp
GROUP BY job;

例:统计每个部门的人数,总工资,平均工资

SELECT deptno,COUNT(*),SUM(sal),AVG(sal)
FROM emp
GROUP BY deptno;

 

分组统计的使用限制:

限制一:在不使用GROUP BY子句的时候,SELECT子句只允许出现统计函数,不允许出现任何其他字段;

 

限制二:在使用GROUP BY子句的时候,SELECT子句只允许出现分组字段与统计函数,其他的字段不允许出现;

限制三:统计函数允许嵌套,嵌套后的统计操作SELECT子句中不允许出现任何的字段,包括分组字段;

 

 

HAVING子句

   HAVING主要是针对于分组后的数据的筛选

⑤SELECT 分组字段,统计函数【别名】,统计函数【别名】,....

①FROM 数据表 【别名】

②【WHERE 参与运算的数据行的筛选条件(s)】

③【GROUP BY 分组字段】

④【HAVING 分组过滤条件(s)】

⑥【ORDER BY 排序字段 【ASC | DESC】】

例:查询工资总和高于9000的部门编号,部门人数,总工资

SELECT deptno,COUNT(*),SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal)>9000;

      WHERE子句:是在GROUP BY分组前使用的,目的是确定进行分组的数据,无法使用统计函数;

      HAVING子句:是在GROUP BY分组后使用,目的是针对于分组后的统计进行二次筛选,可以使用统计函数。

 

posted @ 2020-01-27 19:26  萧余  阅读(544)  评论(0编辑  收藏  举报