分组函数
常用的一些函数
AVG(sal), MAX(sal), MIN(sal)
MIN(hiredate) , MAX(hiredate)
中间的工资值 MEDIAN(sal)
标准差与方差 STDDEV(sal),VARIANCE(sal)
注意事项一:
如果没有GROUP BY子句,则在SELECT子句中只能出现统计函数,其他任何字段都不允许 出现。
错误范例:统计出每个部门的人数 select deptno,count(empno)from emp;
正确范例:统计出每个部门的人数 select count(empno)from emp
注意事项二:
SELECT 子句后只允许出现分组字段和统计函数,而其他的非分组字段不能使用。
错误范例:统计出每个部门的人数 select deptno,ename,count(empno)from emp group by deptno;
正确范例: 统计出每个部门的人数 select deptno,count(empno)from emp group by deptno;
注意事项三:
统计函数允许嵌套使用,但是嵌套统计函数之后的SELECT子句中不 允许再出现任何的字段,包括分组字段。。
正确范例:求出每个部门平均工资最高的工资 SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ;
错误范例:求出每个部门平均工资最高的工资 SELECT deptno MAX(AVG(sal)) FROM emp GROUP BY deptno ;
就不截屏了,有疑问可以自己试试
下面是一些参考实体,很有学习价值
例 查询每个部门的名称、部门人数、部门平均工资、平均服务年限
例:查询出公司各个工资等级雇员的数量、平均工资
例:统计出领取佣金与不领取佣金的雇员的平均工资、雇员人数。
例:现在要求查询出每个部门的详细信息,包括部门编号、部门人数、平均工资、总工资、最高工资、最低工资
HAVING子句
目的:分组之后的数据进行再次过滤(组函数不能再where语句中出现,所以关于组函数的删选用having完成)。
SQL语句执行流程:
- 执行FROM子句,确定要检索的数据来源。
- 执行WHERE子句,使用限定符对数据行进行过滤。
- 执行GROUP BY子句,根据指定字段进行分组。
- 执行HAVING子句,对分组后的统计数据进行过滤。
- 执行SELECT子句,确定要检索出的分组字段以及编写相应统计函数。
- 执行ORDER BY子句。
例:列出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资
例:显示非销售人员工作名称以及从事同一工作雇员的月工资的总和,并且满足从事同一工作的雇员月工资合计大于5000,输出结果月工资按升序排列