分组函数 返回值是多条记录 或计算后的结果
group by
sum
avg
<1> 计算记录的条数 count
select count(*) from emp;
select count(1) from emp;
select count(comm) from emp; 字段上count 会忽略空值
comm不为空值的记录的条数
统计emp表中不同工作的个数 ????
select count(distinct job) from emp;
select distinct job from emp;
select distinct job,empno from emp;
select job,empno from emp;
得到的效果是一样的,distinct 是消去重复行
不是消去重复的列
<2>group by 分组统计
--在没有分组函数的时候
--相当于distinct 的功能
select job from emp group by job;
select distinct job from emp;
--有分组函数的时候
--分组统计的功能
统计每种工作的工资总额是多少??
select job,sum(sal) from emp
group by job; --行之间的数据相加
select sum(sal) from emp; --公司的工资总额
统计每种工作的平均工资是多少??
select job,avg(sal) from emp
group by job;
select avg(saL) from emp; --整个公司的平均工资
显示平均工资>2000的工作???
<1>统计每种工作的平均工资是多少
<2>塞选出平均工资>2000的工作
从分组的结果中筛选 having
select job,avg(sal) from emp
group by job
having avg(sal) > 2000;
group by 经常和having搭配来筛选
计算工资在2000以上的各种工作的平均工资????
select job,avg(sal) from emp
where sal > 2000
group by job
having avg(sal) > 3000;
一般group by 和 having搭配
表示对分组后的结果的筛选
where子句 --- 用于对表中数据的筛选
<3> max min
select max(sal) from emp;
公司的最高工资
select min(sal) from emp ;
公司的最低工资
找每个部门的最高和最低的工资??
select deptno,max(sal),min(sal) from emp
group by deptno;
找每个工作的最高和最低的工资??
select job,max(sal),min(sal) from emp
group by job;
找每个部门中每种工作的最高和最低的工资??
select deptno,job,max(sal),min(sal)
from emp
group by deptno,job;
select max(sal),min(sal)
from emp
group by deptno,job;
单个字段如果没有被分组函数所包含,
而其他字段又是分组函数的话
一定要把这个字段放到group by中去