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
.
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:
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”:
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:
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.
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.