分组函数作用于一组数据,并对一组数据返回一个值。
组函数类型
Avg平均值
Count返回不为空的总记录数
Max最大值
Min最小值
SQL> select avg(salary),max(salary),min(salary),sum(salary) from employees;
AVG(SALARY) MAX(SALARY) MIN(SALARY) SUM(SALARY)
----------- ----------- ----------- -----------
6461.68224 24000 2100 691400
Stddev标准方差
Sum总和
DISTINCT(distinct) 关键字
COUNT(DISTINCT expr) 返回 expr非空且不重复的记录总数
SQL> select count(DISTINCT employee_id) from employees;
COUNT(DISTINCTEMPLOYEE_ID)
--------------------------
107
组函数忽略空值。
select avg(commission_pct) from employees
NVL函数使分组函数无法忽略空值
select avg(nvl(commission_pct,0)) from employees
分组数据: GROUP BY 子句语法
可以使用GROUP BY 子句将表中的数据分成若干组
在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中。
SQL> select employee_id,avg(salary) from employees group by employee_id;
包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
所用包含于SELECT 列表中,而未包含于组函数中的列都必须包含于 GROUP BY 子句中,否则会报错:第 1 行出现错误: ORA-00979: 不是 GROUP BY 表达式
注意:
不能在 WHERE 子句中使用组函数(注意)。
可以在 HAVING 子句中使用组函数。
过滤分组:
使用 HAVING 过滤分组:
1. 行已经被分组。
2. 使用了组函数。
3. 满足HAVING 子句中条件的分组将被显示
select department_id,max(salary) from employees group by department_id having max(salary)>10000
嵌套组函数
显示平均工资的最大值
SQL> select max(avg(salary)) from employees group by department_id;
MAX(AVG(SALARY))
----------------
19333.3333
Oracle(五)---------------------分组函数
最新推荐文章于 2024-09-25 10:31:05 发布