29/12/2008
A cláusula HAVING foi adicionada ao SQL porque a palavra-chave WHERE não pode ser utilizada com funções agregadas.
Sintaxe SQL do HAVING
SELECT nome_coluna, funcao_agregada(nome_coluna)
FROM nome_tabela
WHERE nome_coluna operador valor
GROUP BY nome_coluna
HAVING funcao_agregada(nome_coluna) operador valor
Exemplo SQL de HAVING
Temos a seguinte tabela "Ordens":
| 
             ID_Ordem  | 
            
             Data_Ordem  | 
            
             Preco_Ordem  | 
            
             Cliente  | 
        
| 
             1  | 
            
             12/11/2008  | 
            
             1000  | 
            
             Pedro  | 
        
| 
             2  | 
            
             23/10/2008  | 
            
             1600  | 
            
             José  | 
        
| 
             3  | 
            
             2/9/2008  | 
            
             700  | 
            
             Pedro  | 
        
| 
             4  | 
            
             3/9/2008  | 
            
             300  | 
            
             Pedro  | 
        
| 
             5  | 
            
             30/8/2008  | 
            
             2000  | 
            
             Mauro  | 
        
| 
             6  | 
            
             4/10/2008  | 
            
             100  | 
            
             José  | 
        
Agora queremos descobrir se algum dos clientes tem um total de ordens inferior a 2000.
Nós usamos o seguinte comando SQL:
SELECT Cliente, SUM(Preco_Ordem) FROM Ordens
GROUP BY Cliente
HAVING SUM(Preco_Ordem) < 2000
O resultado ficará assim:
| 
             Cliente  | 
            
             SUM(Preco_Ordem)  | 
        
| 
             José  | 
            
             1700  | 
        
Agora queremos descobrir se os clientes "Pedro" ou "Mauro" tem um total de ordens maior do que 1500.
Nós adicionamos uma cláusula WHERE na instrução SQL:
SELECT Cliente, SUM(Preco_Ordem) FROM Ordens
WHERE Cliente = 'Pedro' OR Cliente = 'Mauro'
GROUP BY Cliente
HAVING SUM(Preco_Ordem) > 1500
O resultado ficará assim:
| 
             Cliente  | 
            
             SUM(Preco_Ordem)  | 
        
| 
             Pedro  | 
            
             2000  | 
        
| 
             Mauro  | 
            
             2000  | 
        
Por: Fernando Segantini Cruz
Esta apresentação reflete a opinião pessoal do autor sobre o tema, podendo não refletir a posição oficial do Portal Educação.
        O Portal Educação possui uma equipe focada no trabalho de curadoria de conteúdo. Artigos em diversas áreas do conhecimento são produzidos e disponibilizados para profissionais, acadêmicos e interessados em adquirir conhecimento qualificado. O departamento de Conteúdo e Comunicação leva ao leitor informações de alto nível, recebidas e publicadas de colunistas externos e internos.
                        UOL CURSOS TECNOLOGIA EDUCACIONAL LTDA, com sede na cidade de São Paulo, SP, na Alameda Barão de Limeira, 425, 7º andar - Santa Cecília CEP 01202-001 CNPJ: 17.543.049/0001-93