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.
HAVING Condi????oProcura
-- 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