Cláusula HAVING

A cláusula HAVING restringe os resultados do GROUP BY na ExpressãoSeleção. A cláusula HAVING é aplicada a cada grupo da tabela agrupada, de forma parecida como a cláusula WHERE é aplicada à lista de seleção. Se não houver uma cláusula GROUP BY, a cláusula HAVING será aplicada a todo o resultado como um único grupo. A cláusula SELECT não pode fazer referência direta a qualquer coluna que não possua uma cláusula GROUP BY. Entretanto, pode fazer referência a constantes, agregações, e registros especiais.

Sintaxe

HAVING CondiçãoProcura
A CondiçãoProcura, que é uma ExpressãoBooleana especializada, pode conter apenas as colunas de agrupamento (consulte a Cláusula GROUP BY), colunas que fazem parte das expressões de agregação, e as colunas que fazem parte da subconsulta. Por exemplo, a seguinte consulta é ilegal, porque a coluna SALÁRIO não é uma coluna de agrupamento, não aparece em uma agregação, e não está em uma subconsulta:
-- SELECT COUNT(*)
-- FROM SAMP.EQUIPES
-- GROUP BY ID
-- HAVING SALÁRIO > 15000;

As agregações na cláusula HAVING não precisam aparecer na lista de seleção. Se a cláusula HAVING possuir uma subconsulta, a subconsulta poderá fazer referência ao bloco de consulta externo se, e somente se, fizer referência a uma coluna de agrupamento.

-- Descobrir o número total de assentos econômicos
-- ocupados no vôo, agrupado por linha aérea,
-- somente quando o grupo possuir pelo menos 2 linhas.
SELECT SUM(ASSENTOS_ECONÔMICOS_OCUPADOS), LINHA_AÉREA_CHEIA
FROM VÔOS_DISPONIBILIDADE, LINHAS_AÉREAS
WHERE SUBSTR(VÔOS_DISPONIBILIDADE.ID_VÔO, 1, 2) = LINHA_AÉREA
GROUP BY LINHA_AÉREA_CHEIA
HAVING COUNT(*) > 1

Conceitos relacionados
Interação com o sistema de dependências
Instruções CREATE
Instruções DROP
Instruções RENAME
Instruções SET
Referências relacionadas
Instrução ALTER TABLE
CALL (PROCEDIMENTO)
Cláusula CONSTRAINT
Instrução DECLARE GLOBAL TEMPORARY TABLE
Instrução DELETE
Cláusula FOR UPDATE
Cláusula FROM
Cláusula GROUP BY
INNER JOIN
Instrução INSERT
Operação JOIN
LEFT OUTER JOIN
Instrução LOCK TABLE
Cláusula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
ExpressãoSeleção
Instrução SELECT
ExpressãoTabela
SubconsultaTabela
Instrução UPDATE
VALUES Expressão
Cláusula WHERE
Cláusula WHERE CURRENT OF