要完成 GROUP BY 子句,使用 HAVING 子句来在构成组之后将一个或多个限制条件应 用于这些组。HAVING 子句对组的影响类似于 WHERE 子句限定个别行的方式,使用 HAVING 子句的一个优点是可以在搜索条件中包括聚集,而在 WHERE 子句的搜索条件 中去不能包含聚集。 每个 HAVING 条件将组的一列或一个聚集表达式与组的另一个聚集表达式或与常量作比 较。可以使用 HAVING 来对列值或组列表中的聚集值设置条件。 下列查询返回具有两个商品以上的订单上每个商品的平均总价格。 HAVING 子句在每个组 构成时测试每个组,并选择由两行以上构成的那些组。 图: 查询 SELECT order_num, COUNT(*) number, AVG (total_price) average FROM items GROUP BY order_num HAVING COUNT(*) > 2; 图: 查询结果 order_num number average
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 120 - FROM items HAVING count(*) > 2; 图: 查询结果 average
$270.97 如果图 3与图 1一样,在 Projection 子句中包含了非聚集列 order_num ,那么必须将 GROUP BY 子句与组列表中的列包含子啊一起。此外,如果不满足 HAVING 子句中的条 件,那么输出将显示列标题以及一条消息指示没有找到任何行。 下列查询包含可以在 GBase 8s 版本的交互 SQL 中使用的所有 SELECT 语句子句(命名 主变量的 INTO 子句只在 SQL API 中可用)。 图: 查询 SELECT o.order_num, SUM (i.total_price) price, paid_date - order_date span FROM orders o, items i WHERE o.order_date > '01/01/98' AND o.customer_num > 110 AND o.order_num = i.order_num GROUP BY 1, 3 HAVING COUNT (*) < 5 ORDER BY 3 INTO TEMP temptab1; 该查询连接 orders 和 items 表;使用显示标号、表列名和用作列指示符的整数;对数据进行 分组和排序;并将结果放置在临时表中,如下所示。 图: 查询结果 order_num price span