mysql分组数据

分组数据

mysql可以使用聚集函数来汇总数据,这时的我们可以对数据进行计数,计算和与平均数,获得最大值和最小值而不用检索所有的数据

使用where子句来返回计数的数据

select count(*) from emp1 where deptno=10;

count(*)
3

使用group by来返回分组的计数数据

select deptno ,count(*) from emp1 group by deptno;

deptnocount(*)
103
205
306

使用group by 的注意事项:
1.group by 子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制

>select mgr,deptno,count(*) from emp1 group by deptno,mgr;
mgrdeptnocount(*)
NULL101
7782101
7839101
7566202
7788201
7839201
7902201
7698305
7839301

2.如果group by 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换言之,在建立分组的时候,指定的所有列都一起计算(所以不能从个别的列取回数据

3.group by 子句中列出的每一个列都必须是检索列或者有效的表达式(但不能是聚集函数),如果在select中使用表达式,则必须在group by子句中指定相同的表达式,不能使用别名

4.除了聚集计算语句之外,select语句中的每一列都必须子啊group by 子句中出现。
5.如果分组中有null值,则null值将作为一个分组返回,日过列中有很多行null值,他么将分为一组

6.group by 子句必须出现在where 子句之后,order by子句之前。

过滤分组

除了使用group by分组数据外,mysql还允许过滤分组,规定包括哪些分组,排除哪些分组
例子:

select deptno,count() from emp1 group by deptno having count() >3;

deptnocount(*)
205
306

having支持所有的where操作符,过滤分组的时候不能使用where,where是过滤行,而having是过滤分组

select deptno,count(*) from emp1 group by deptno having avg(sal)>2000;

deptnocount(*)
103
205

having 后面可以使用所有的聚集函数

where和having的差别:

select deptno ,count(*) from emp1 where sal>2000 group by deptno having count(*)>2;

查找出emp1表中的薪水大于2000的并且人数超过2人的部门和人数

deptnocount(*)
203

分组和排序

group by和order by经常完成相同的工作,但他们是非常不同的。

order bygroup by
是排序产生的输出分组行,但输出不一定是分组的顺序
任意列都可以使用只能使用选择列或者表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列或者表达式,则必须使用

select子句顺序

子句说明是否必须使用
select要返回的列或者表达式
from从检索数据的表在从表中选择数据时需要在使用
where行级过滤
group by分组说明仅在按组计算聚集时需要使用
having组级过滤
order by输出排序顺序
limit要检索的行数

select
from
where
group by
having
order by
limit

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值