HAVING子句

HAVING 子句指定 GROUP BY 子句选择的组的搜索条件。

HAVING 子句表示您 需要那些满足该子句中的条件的组。 因此,您在 HAVING 子句中指定的搜索条件必须测试每个组的属性,而不是组中各个行的属性。

HAVING 子句跟在 GROUP BY 子句之后,并且可以包含与您可以在 WHERE 子句中指定的相同类型的搜索条件。 此外,可以在 HAVING 子句中指定聚集函数。 例如,假设您要检索每个部门中女性的平均工资。 为此,请使用 AVG 聚集函数并按 WORKDEPT 对生成的行进行分组,并指定 WHERE 子句 SEX = 'F'

要指定仅当所选部门中的所有女性员工的教育程度等于或大于 16 (大学毕业生) 时才需要此数据,请使用 HAVING 子句。 HAVING 子句用于测试组的属性。 在这种情况下,测试在 MIN (EDLEVEL) 上,它是组属性:

SELECT WORKDEPT, DECIMAL(AVG(SALARY),5,0) AS AVG_WAGES, MIN(EDLEVEL) AS MIN_EDUC
       FROM CORPDATA.EMPLOYEE
       WHERE SEX='F'
       GROUP BY WORKDEPT
       HAVING MIN(EDLEVEL)>=16;

结果如下。

WORKDEPT 平均工资 MIN_EDUC
A00 49625 18
C01 29722 16
D11 25817 17
通过将多个谓词与 AND 和 OR 连接,可以在 HAVING 子句中使用这些谓词,并且可以将 NOT 用于搜索条件的任何谓词。
注: 如果您打算更新列或删除行,那么不能在 SELECT 语句中的 DECLARE CURSOR 语句中包含 GROUP BY 或 HAVING 子句。 这些子句使其成为只读游标。

可以在 WHERE 或 HAVING 子句中对具有非聚集函数的自变量的谓词进行编码。 通常,在 WHERE 子句中对选择条件进行编码的效率更高,因为它在查询处理中是较早处理的。 HAVING 选择在结果表的后处理中执行。

如果搜索条件包含涉及字符的谓词,或者包含 UCS-2 或 UTF-16 图形列,那么运行查询时生效的排序顺序将应用于这些谓词。