A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© laoyang 黑马帝   /  2011-11-21 22:48  /  15930 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈涛 于 2011-11-22 10:23 编辑

having和group by分别要在什么时候用?

7 个回复

倒序浏览
group by 是在需要对某个重复出现的字段进行数据的分组显示的时候用到  group by后面加的需要分组的那个字段  

having  是对进行分组的数据的条件判断 只能跟在group by 后面出现

杨老师的视频第4季SQL从入门到提高(培训资料数据库开发SQL基础)第5数据分组里面有讲

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
1、当select子句中使用了聚合函数时,需使用group by进行分组;
2、如果使用了group by进行分组,并且要加条件只能使用having子句;
3、两者的关系:当一条含有having的sql语句时就一定要有group by的出现。
如:在一张学生成绩表中,查询平均成绩大于等于80的所以名单。
  select 专业,avg(成绩) as 平均成绩
  from 成绩表
  group by 专业
  having avg(成绩) >=80

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
对于这个group by ,简单地来说,再需要对数据中特定字段进行分组时使用,而having则是在group by 后进行条件筛选。这地方必须要注意的两点是:having +条件 和 where+条件不能混淆,二:没有出现在group by 后面的字段也不能出现在select中(除了聚合函数)。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
付炯 黑马帝 2011-11-22 07:55:03
报纸
数据分组利用GROUP BY子句 必须出现在WHERE子句之后 没有出现在GROUP BY子句中的列不能出现在SELECT语句中
如果需要对分组后的结果进行过滤 应当使用HAVING子句 且只能在子句中放置组的过滤信息。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
Group by的作用对象是查询的中间结果集,按照指定的一列或多列值进行分组,值相等为一组。使用Group by子句后,select子句的列名列表中只能出现分组属性和集函数。
Having是作为Group by子句的条件出现的,所以Having子句必须与Group by子句同时出现,并且出现在Group by之后。
在Having中的列只返回一个值。

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
group by 是用于分组的。是使用group by 时如果要加条件(相当于where)就要使用having子句。
group by 可以不使用having(没有条件来约束它);、

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在select语句中定义的列和聚合表达式上。通常,你需要通过在having子句中重复聚合函数表达式来引用聚合值。

having依赖于group by
用于分组后更方便的筛选,不用group by也能筛选出结果
如:
1.显示名字和条数大于1的
select name ,count(*) from tablename group by name having count(*)>1;

2.查询系名字和平均工资小于1800的
select deptName,avg(saliry)
from tablename
group by deptName
having avg(saliry)<1800;

等价于:
select *
from
(
select deptName,avg(saliry)
from tablename
group by deptName
) as newTable
where avg(saliry)<1800;

--> having性能更高,代码更简洁

关于能够用于条件筛选的
on:联结(join)筛选
where: 一般条件筛选
having: 分组后的条件筛选

评分

参与人数 1技术分 +1 收起 理由
陈涛 + 1

查看全部评分

回复 使用道具 举报
朱勋 黑马帝 2011-11-22 10:17:01
8#
having 就是在groupby之后在进行详细的筛选
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马