SQL HAVING: Como filtrar resultados com funções agregadas

SQL HAVING é uma condição que pode ser aplicada a entradas já agrupadas. Ela funciona com funções agregadas e é utilizada para restringir o conjunto de resultados.

O que é SQL HAVING?

Além da conhecida cláusula WHERE, existe em SQL (Structured Query Language) outra condição amplamente utilizada: SQL HAVING. Esta cláusula foi introduzida para filtrar dados com base em critérios específicos. Ela é usada com o comando SQL SELECT e a instrução SQL GROUP BY. Enquanto o GROUP BY agrupa os resultados, a cláusula SQL HAVING restringe esse conjunto de resultados com a ajuda de diferentes funções agregadas. A cláusula HAVING foi criada porque WHERE não interage com funções agregadas como SQL AVG(), SQL COUNT(), MAX(), MIN() e SUM(). SQL HAVING é usada após instruções WHERE (se existirem) e GROUP BY, mas antes de ORDER BY.

vServer (VPS) da IONOS

Hospedagem VPS poderosa e de baixo custo para rodar suas aplicações sob medida, com assistente pessoal e suporte 24 horas.

  • Armazenamento 100% SSD
  • Pronto em 55 segundos
  • Certificado SSL

Sintaxe e funcionamento de SQL HAVING

Para entender o funcionamento e a utilidade do SQL HAVING, vale a pena observar a sintaxe da cláusula. Ela é a seguinte:

SELECT nome_da_coluna(s)
FROM nome_da_tabela
WHERE condição
GROUP BY nome_da_coluna(s)
HAVING condição
ORDER BY nome_da_coluna(s);
sql

Normalmente, uma função agregada é aplicada a uma ou mais colunas. Em seguida, o nome da tabela é especificado. A condição WHERE é opcional. GROUP BY agrupa valores idênticos em grupos, que são então filtrados de forma mais precisa com HAVING e ordenados com ORDER BY.

Exemplo de aplicação de SQL HAVING

A maneira mais simples de ilustrar a cláusula SQL HAVING é com um exemplo prático. Vamos criar uma pequena tabela chamada “Lista de Clientes”. Ela contém as colunas “Número do Cliente”, “Nome”, “Localização” e “Itens”.

Número do Cliente Nome Localização Itens
1427 Schmidt Goiânia 13
1377 Marques Vitória 9
1212 Pedroso Vitória 15
1431 Nunes Fortaleza 22
1118 Becker Goiânia 10

Agora utilizamos SQL HAVING para descobrir quantos clientes de Vitória fizeram pedidos de dez ou mais itens. Usamos o seguinte código e indicamos a quantidade com um alias em SQL chamado “Número de Pedidos”:

SELECT Localização, COUNT(Localização) AS Número de Pedidos
FROM Lista de Clientes
WHERE Localização = 'Vitória'
GROUP BY Localização, Itens
HAVING COUNT(Itens) > 10;
sql

A saída correspondente é a seguinte:

Localização Número de Pedidos
Vitória 1

Combinar SQL HAVING e INNER JOIN

Você também pode combinar SQL HAVING com a palavra-chave INNER JOIN. Para isso, criamos uma segunda tabela chamada “Item_01”, onde é registrado com que frequência e quando um determinado item foi pedido. Ela contém um número do pedido, um número de cliente, a quantidade e uma data de pedido e é exibida da seguinte forma:

Número do Pedido Número do Cliente Quantidade Data
00283 1427 4 2024-01-15
00284 1211 7 2024-01-19
00285 1275 15 2024-01-29
00286 1431 10 2024-02-01
00287 1427 9 2024-02-05

Agora podemos instruir o sistema a exibir todos os clientes que realizaram mais de um pedido, agrupando-os pelo nome e contando o número de pedidos. O código adequado é o seguinte:

SELECT Lista_de_Clientes.Nome, COUNT(Item_01.Número_do_Pedido) AS Número_de_Pedidos
FROM (Item_01
INNER JOIN Lista_de_Clientes ON Item_01. Número_do_Cliente = Lista_de_Clientes.Número_do_Cliente)
GROUP BY Nome
HAVING COUNT(Item_01.Número_do_Pedido) > 1;
sql

Esta é a saída que obtemos:

Nome Número de Pedidos
Schmidt 2

Alternativa ao SQL HAVING

Uma alternativa ao SQL HAVING é o WHERE. No entanto, ambas as opções não podem ser usadas exatamente da mesma forma. WHERE é utilizado para registros individuais e pode ser combinado com SELECT, DELETE ou UPDATE. HAVING, por outro lado, é exclusivamente para registros agrupados e só é compatível com SELECT. WHERE é usado antes de GROUP BY, enquanto HAVING é usado depois. Além disso, apenas o SQL HAVING pode trabalhar com funções de agregação.

Dica

Um servidor perfeitamente ajustado às suas necessidades: com o SQL Server Hosting da IONOS, você escolhe entre MSSQL, MySQL e MariaDB e se beneficia de uma forte arquitetura de segurança, desempenho excelente e um atendimento pessoal a qualquer momento.

Este artigo foi útil?
Para melhorar a sua experiência, este site usa cookies. Ao acessar o nosso site, você concorda com nosso uso de cookies. Mais informações
Page top