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;

file

select deptno,job,avg(sal) from emp group by deptno,job;

file
这里相同deptno,不同job视为一个新组。
使用having函数对分组后的数据进行过滤:

select ename,job,avg(sal) from emp group by ename,job having avg(sal)>=2000;

file
注意:
where要放在group by前面
group by 后面加条件只能用having关键字

使用聚合函数时,会自动忽略空值。

select sum(comm),count(*),avg(comm) "Average number of people with bonus" from emp;

file
那么如何不忽略呢,需要用到nvl函数,nvl(x,y)x若为空,则值为y,x若不空,则值为x。

select sum(comm),count(*),avg(nvl(comm,0)) "Average number of all people" from emp;

file

Related Posts