您的位置:首页 > 数据库 > MySQL

mysql中having语句与where语句的用法与区别, 对数据分组的总结

2014-06-09 10:21 531 查看
■ 对数据分组的总结

1分组函数只能出现在选择列表、having、order by子句种

2 如果在select 语句种同时包含有group by ,having ,order by 那么他们的顺序是group by , having , order by

3 在选择列种如果有列、表达式、和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错

如select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

这里deptno就一定要出现在 group by 中

select max(sal),min(sal),deptno,job from emp group by deptno,job
having
max(sal) > 5000 order by
max(sal) desc;
http://www.phpzixue.cn/detail338.shtml
我们在写sql语句的时候,经常会使用where语句,很少会用到having,其实在mysql中having子句也是设定条件的语句与where有相似之处但也有区别。having子句在查询过程中慢于聚合语句(sum,min,max,avg,count).而where子句在查询过程中则快于聚合语句(sum,min,max,avg,count)。

简单说来:

where子句:

select sum(num) as rmb from order where id>10

//只有先查询出id大于10的记录才能进行聚合语句

having子句:

select reportsto as manager, count(*) as reports from employees

group by reportsto having count(*) > 4

以test库为例.having条件表达示为聚合语句。肯定的说having子句查询过程慢于聚合语句。

再换句说话说把上面的having换成where则会出错。统计分组数据时用到聚合语句。

对分组数据再次判断时要用having。如果不用这些关系就不存在使用having。直接使用where就行了。

having就是来弥补where在分组数据判断时的不足。因为where要快于聚合语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: