HAVING子句

  HAVING子句用于指定对组进行过滤的谓词或逻辑表达式,这与WHERE阶段对单独的行进行过滤相对应。只有能让HAVING子句中的逻辑表达式为TRUE的组,HAVING阶段才会把这些组返回到下一个逻辑查询处理阶段。逻辑表达式计算结果为FALSE或UNKNOWN的组将被过滤掉。

  因为HAVING子句是在对行进行分组后处理的,所以可以在逻辑表达式中引用聚合函数。例如,在下面所示的代码中,HAVING子句使用了逻辑表达式COUNT(*)>1,意味着HAVING阶段过滤器只保留包含多行的组(雇员和订单年份)。

 SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders
 FROM Sales.Orders
 WHERE custid = 71
 GROUP BY empid,YEAR(orderdate)
 HAVING COUNT(*) > 1
 ORDER BY empid,orderyear;

  

  前面提到GROUP BY阶段创建了16个雇员ID和订单年份组,其中有7个组只包含1行,所以在HAVING子句处理完后,只剩下9个组。

原文地址:https://www.cnblogs.com/ShaYeBlog/p/2697140.html