1. group by 之后 select 中只能出现分组后的整体信息,不能出现组内详细信息
2. select deptno, job, AVG(sal), COUNT(*), SUM(sal), MIN(sal) from emp
group by deptno, job
order by deptno
PS: group by a, b, c
这个分组是按照a, b, c三个组合分组的
3. having —— 对分组之后的信息过滤
聚合函数 —— 多行记录返回一个值,通常用于统计分组的信息
4. from emp where sal > 2000 --where是对原始的记录过滤
group by deptno having AVG(sal)>3000 --对分组之后的记录过滤
PS: 所有 select 的参数的顺序是不允许变化的,否则编译时出错
5. having 和 where的异同:
相同点:
都是对数据过滤,只保留有效的数据
where 和 having 一样,都不允许出现字段的别名
不同点:
where 是对原始的记录过滤,having是对分组之后的数据过滤
where必须写在having前面,顺序不可颠倒,否则运行出错
6. 不允许在 where 中使用分组函数实例,所以先执行 where时对emo表还没有进行分组因此编译时会报错
select deptno, AVG(sal) from emp where AVG(sal)>2000 group by deptno