Oracle - 多行函数
- SQL执行流程:
最先执行的是from table,
然后是Where子句,在对表数据进行过滤后,
符合条件的数据通过Group by进行分组,
分组数据通过Having子句进行聚合函数过滤,
在执行select语句,如果有别名配置别名
最终的结果通过order by子句进行排序,
排序的结果被返回给用户
一、聚合函数
- 如果统计的列中只有NULL值,那么MAX和MIN就返回NULL
- 最多嵌套2层
组函数 | 含义 |
---|---|
AVG | 求平均值 |
COUNT | 统计行的数量 |
MAX | 求最大值 |
MIN | 求最小值 |
SUM | 求和 |
二、分组 group by
- 不能对主键进行分组
- 对有重复的记录进行分组,一般都是外键字段
--显示每个部门的平均工资
select department_id,avg(salary),count(*) from employees group by department_id;
三、分组过滤 having
-
HAVING可以单独使用而不和GROUP BY配合,如果只有HAVING子句而没有GROUP BY,表中所有的行分为一组
-
HAVING子句中可以使用组函数
-
HAVING子句中的列,要么出现在一个组函数中,要么出现在GROUP BY子句中(否则出错)
--显示每个部门的平均工资并且大于4000
--错误写法(avg(salary)>4000不能获取,因为avg(salary)是分组才能获取)
select department_id,avg(salary) from employees where avg(salary)>4000 group by department_id;
--正确写法
select department_id,avg(salary) from employees group by department_id having avg(salary)>4000;