A Cláusula HAVING

Informática

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.


Colunista Portal - Educação

por Colunista 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.

Portal Educação

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