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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 申延超 中级黑马   /  2012-11-20 23:35  /  2162 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 申延超 于 2012-11-23 13:12 编辑
  1. select Fage,COUNT(*) from T_Employee
  2. where COUNT(*)>1
  3. group by FAge;
复制代码
在where中不能使用聚合函数,只能用having,不明白什么是聚合函数,就是这种Count(*)>1的?
那为什么下面这段代码又可以?
  1. select Fage,COUNT(*) from T_Employee
  2. where FAge=23
  3. group by FAge;
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

5 个回复

倒序浏览
其实在聚合函数里面,where与having有这点不同:where 是对数据库里面的数据进行一个筛选,而having是对已经筛选出来的数据进行一个筛选。所以,where后面跟的当然是字段并进行判断,而having后面跟的一个函数.......

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
聚合函数有:
1. AVG  返回指定组中的平均值,空值被忽略。
2. COUNT  返回指定组中项目的数量。
3. MAX  返回指定数据的最大值。
4. MIN  返回指定数据的最小值。
5. SUM  返回指定数据的和,只能用于数字列,空值被忽略。

Where 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。

Having是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
聚合函数包括:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量)
where是返回结果之前检索符合条件的数据,并且聚合函数不能出现在where子句中;
having是对查询结果进行过滤
例:
         select. FAge,  Count(*).  From. Table
            Group.  by. FAge
            Having. Count(*)>1
      Having是对分组后信息的过滤,能用的列和select中能用到的列一样。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
count这类的聚合函数就像EXCEL中的计算函数一样
Having就像是EXCEL中的分类汇总类似。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
在where中不能使用聚合函数,必须使用having,having位于group by之后,是对符合条件的分组按照having后的条件再进行筛选。Having中不能使用未参与分组的列,having不能代替where使用。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马