Having字句的作用和用法

 HAVING 子句运做起来非常象 WHERE 子句, 只用于对那些满足 HAVING 子句里面给出的条件的组进行计算。 其实,WHERE 在分组和聚集之前过滤掉我们不需要的输入行, HAVING GROUP 之后那些不需要的组. 因此,WHERE 无法使用一个聚集函数的结果. 而另一方面,我们也没有理由写一个不涉及聚集函数的 HAVING 如果你的条件不包含聚集,那么你也可以把它写在 WHERE 里面, 这样就可以避免对那些你准备抛弃的行进行的聚集运算.

  *聚集函数 指的是象count,max,sum,AVG等函数

 如果我们想知道那些销售超过2个部件的供应商,使用下面查询: 

 SELECT S.SNO, S.SNAME, COUNT(SE.PNO)

    FROM SUPPLIER S, SELLS SE

    WHERE S.SNO = SE.SNO

    GROUP BY S.SNO, S.SNAME

    HAVING COUNT(SE.PNO) > 2;

---------------------------------------------
以前只是学过having条件查询,但是在工作中从没有用过,今天和同事讨论问题时才发现原来写的很多代码都可以简化。如:投票中,我要查询票数大于3的记录时,
原来我会这样写:Select * From (Select EmployeeID,Count(AgreeFlag) As VoteNum From T_Vote Where AgreeFlag = 1)tb Where tb.VoteNum >3
实际上可以这样写:Select EmployeeID,Count(AgreeFlag) As VoteNum From T_Vote Having AgreeFlag = 1 And Count(AgreeFalg) > 3
有时可以将where和having连用,如:
Select columname1,count(*) From tablename
Where columnname = value
Group By columnname1
Having count(*) > 3

posted @ 2005-12-31 16:30  torome  阅读(1525)  评论(0编辑  收藏  举报