GroupBy语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,GROUP BY必须得配合聚合函数来用,分组之后你可以计数(COUNT),求和(SUM),求平均数(AVG)等。
select deptno,avg(sal) from emp group by deptno;
出现在select后面的字段,要么用在分组中,要么用在聚合函数中,如果有多余的会报错。
select deptno,job,avg(sal) from emp group by deptno;
select deptno,job,avg(sal) from emp group by deptno,job;
这里相同deptno,不同job视为一个新组。
使用having函数对分组后的数据进行过滤:
select ename,job,avg(sal) from emp group by ename,job having avg(sal)>=2000;
注意:
where要放在group by前面
group by 后面加条件只能用having关键字
使用聚合函数时,会自动忽略空值。
select sum(comm),count(*),avg(comm) "Average number of people with bonus" from emp;
那么如何不忽略呢,需要用到nvl函数,nvl(x,y)x若为空,则值为y,x若不空,则值为x。
select sum(comm),count(*),avg(nvl(comm,0)) "Average number of all people" from emp;