分组函数是oracle中作用于一组数据,返回一个值。
分组函数有:AVG,COUNT,MAX,MIN,STDDEV,SUM等。
分组函数语法如下:
SELECT [column,] group_function(column), ...
FROM table
[WHERE condition]
[GROUP BY column]
[ORDER BY column];
AVG(平均值)、SUM (合计)函数、MIN(最小值) 、 MAX(最大值)函数。其中AVG和SUM只能对数值型数据进行操作,MIN和MAX函数可以对任意数据类型的数据进行操作。
eg: select AVG(salary),max(salary),min(salary),sum(salary)
from emp
where job_id = 'IT';
select count(*) from emp;-------返回emp的记录总数。
select count(column) from emp;----返回column不为空的记录总数。
select count(distinct column) from emp;---返回column非空且不重复的记录总数。
select AVG(column) from emp;-----返回column所有非空列的平均值。
select AVG(NVL(column,0)) from emp;---这样就无法忽略空值,返回的就是column所有列的平均值。
PS:SELECT列表中所有未包含在组函数中的列都应该包含在GROUP BY子句中,但是group by子句中的列不需要包含在select列表中。
eg:SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
PS:where子句中不能使用分组函数,但是可以再having子句中使用分组函数。
eg:SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ; 但是将having中的条件放在where子句中则会报错。
分组函数可以嵌套:
eg:SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;-----显示department_id中平均工资最大的department_id。