7. 组函数(聚合函数)
- 对一组数据处理之后,得到一个结果。
7.1 常见的组函数
- count 统计数量
- max 统计最大值
- min 统计最小值
- avg 统计平均值
- sum 统计和
-- 统计s_emp中有多个员工,平均工资,最高和最低工资
SQL> SELECT COUNT(id), AVG(salary), MAX(salary), MIN(salary) FROM s_emp;
7.2 组函数中可以使用ditinct
-- 统计s_emp中的工资总和,如果工资相同只统计一次。
SQL> SELECT SUM(salary), SUM(DISTINCT salary) FROM s_emp;
7.3 NULL的处理
- 组函数对于NULL值是忽略的。
-- 统计s_emp中的提成的个数, 提成的和
SQL> SELECT COUNT(commission_pct), SUM(commission_pct) FROM s_emp;
8. 分组
8.1 分组
- 按照一定的标准 把数据分成若干组
- 语法: group by 分组标准
- 位置: 出现在 where 后面
-- 按照部门号分 ,统计每个部门的人数。
SQL> SELECT dept_id, COUNT(id) FROM s_emp WHERE 1 = 1 GROUP BY dept_id;
注意点:
在分组语句中,select后的字段要么是分组标准,要么是经过合适的组函数处理过的。
-- 按照部门号分组,统计每个部门的平均工资。
SQL> SELECT dept_id, AVG(salary) FROM s_emp GROUP BY dept_id;
8.2 分组过滤
- 分组语句中使用having来进行数据的过滤
-- 按照部门号分组,统计每个部门的平均工资。要求显示工资大于1500
SQL> SELECT dept_id , AVG(salary) FROM s_emp GROUP BY dept_id HAVING AVG(salary) > 1500;
8.3 SQL执行顺序
- from -> where -> group by -> having -> select -> order by
-- 按照部门号分组,统计每个部门的平均工资。要求显示工资大于1500, 且工资降序排列
SQL> SELECT dept_id, AVG(salary) asal FROM s_emp GROUP BY dept_id HAVING AVG(salary) > 0 ORDER BY asal DESC;