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