黑马程序员技术交流社区

标题: SQL中聚合函数问题 [打印本页]

作者: 申延超    时间: 2012-11-20 23:35
标题: SQL中聚合函数问题
本帖最后由 申延超 于 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;
复制代码

作者: 希望在明日    时间: 2012-11-20 23:44
其实在聚合函数里面,where与having有这点不同:where 是对数据库里面的数据进行一个筛选,而having是对已经筛选出来的数据进行一个筛选。所以,where后面跟的当然是字段并进行判断,而having后面跟的一个函数.......
作者: 王新阳    时间: 2012-11-21 00:38
聚合函数有:
1. AVG  返回指定组中的平均值,空值被忽略。
2. COUNT  返回指定组中项目的数量。
3. MAX  返回指定数据的最大值。
4. MIN  返回指定数据的最小值。
5. SUM  返回指定数据的和,只能用于数字列,空值被忽略。

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

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


作者: 韩俊    时间: 2012-11-21 08:58
聚合函数包括:MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量)
where是返回结果之前检索符合条件的数据,并且聚合函数不能出现在where子句中;
having是对查询结果进行过滤
例:
         select. FAge,  Count(*).  From. Table
            Group.  by. FAge
            Having. Count(*)>1
      Having是对分组后信息的过滤,能用的列和select中能用到的列一样。
作者: 武江英    时间: 2012-11-21 09:20
count这类的聚合函数就像EXCEL中的计算函数一样
Having就像是EXCEL中的分类汇总类似。
作者: 韩温华    时间: 2012-11-21 16:31
在where中不能使用聚合函数,必须使用having,having位于group by之后,是对符合条件的分组按照having后的条件再进行筛选。Having中不能使用未参与分组的列,having不能代替where使用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2