组函数

组函数:是指将数据按照某列的值进行分组后,
然后使用组函数分别对每个分好的小组中的数据进行处理。
所以组函数一般要结合着分组关键字group来使用

关键字:
group by:进行分组(可以单独存在)
having:分组之后进行数据的进一步筛选(只能出现在group by 的后面)


函数:
avg       求平均值
count     计算有多少条数据
max       最大值
min       最小值
sum       求和

stddev    标准差
variance  方差

组函数出现的位置: 
1.select后面 
2.having后面 
3.order by后面
4.where后面一定【不能】出现组函数
注意:如果select/having语句后面出现了组函数,那么select/having
后面没有被组函数修饰的列,就必须出现在group by 后面


如果不使用group分组的话,那么默认当前查询到的所有数据是一组。


例子:
1.查询s_emp表中所有员工的平均工资
select avg(salary)
from s_emp;
2.查询s_emp表中共有多少条数据
select count(*)
from s_emp;
3.查询s_emp表中所有员工中的最大工资
select max(salary)
from s_emp;
4.查询s_emp表中所有员工中的最小工资
select min(salary)
from s_emp;
5.查询s_emp表中所有员工的工资总和
select sum(salary)
from s_emp;
6.查询s_emp表中每个部门的平均工资
select dept_id,avg(salary)
from s_emp
group by dept_id;
7.查询s_emp表中每个部门员工的最高工资
select dept_id,max(salary)
from s_emp
group by dept_id;
8.查询s_emp表中每个部门员工的工资总和
select dept_id,sum(salary)
from s_emp
group by dept_id;
9.查询s_emp表中每个部门员工的人数
select dept_id,count(id)
from s_emp
group by dept_id;
10. 查询s_emp表中部门的平均工资大于等于1400的部门
select dept_id,avg(salary)
from s_emp
group by dept_id
having avg(salary)>=1400;
11.查询s_emp表中部门的总工资大于等于4000的部门
select dept_id,sum(salary)
from s_emp
group by dept_id
having sum(salary)>=4000;

12.查询s_emp表中部门的平均工资大于等于1400的部门,
并且显示出这些部门的名字,同时按照部门编号进行排序

select se.dept_id,avg(se.salary),sd.name
from s_emp se,s_dept sd
where se.dept_id=sd.id
group by dept_id,sd.name
having avg(se.salary)>=1400
order by se.dept_id;

或者

select dept_id,sd.id,sd.name
from s_dept sd,(
select dept_id
from s_emp
group by dept_id
having avg(salary)>=1400
)temp
where sd.id=temp.dept_id 
order by dept_id;

13. 查询s_emp表中最大的工资数,
并且显示出这个最大工资的员工的名字
select s2.last_name,max(s1.salary)
from s_emp s1,s_emp s2
group by s2.last_name,s2.salary
having s2.salary=max(s1.salary);
14.查询s_emp表每个部门的最大工资数,并且显示出这
  个最大工资的员工名字以及该部门的名字和该部门所
  属区域,并且使用部门编号进行排序
//每个部门的最大工资数
select dept_id,max(salary)
from s_emp
group by dept_id
//
select s1.last_name,s2.dept_id,max(s2.salary),sd.name,sr.name
from s_emp s1,s_emp s2,s_dept sd,s_region sr
where s1.dept_id=sd.id and sd.region_id=sr.id
group by s2.dept_id,s1.salary,s1.last_name,sd.name,sr.name
having s1.salary=max(s2.salary)

order by s2.dept_id desc;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值