12th Dec 2022 6 minutos de leitura Tutorial SQL HAVING Zahin Rahman sql aprender sql tendo Índice A Função da Cláusula SQL HAVING Sintaxe do SQL HAVING Exemplos de SQL HAVING Exemplo 1: TENDO COM COUNT() Exemplo 2: TANDO com SUM() Exemplo 3: TENDO com AVG() Dominando a Cláusula SQL HAVING Aprenda como usar a cláusula SQL HAVING para filtrar grupos usando suas próprias condições especificadas. A cláusula SQL HAVING é muitas vezes um conceito desafiador de se entender, especialmente para iniciantes. Além disso, seus casos de uso específico podem ser difíceis de visualizar sem exemplos específicos baseados em conjuntos de dados do mundo real. Neste tutorial, você aprenderá como aplicar a cláusula SQL HAVING para filtrar grupos de registros com base em condições especificadas. Você verá exemplos onde aplicamos este conceito para resolver problemas comerciais em um conjunto de dados realistas. A Função da Cláusula SQL HAVING A cláusula SQL HAVING é normalmente usada com a cláusula GROUP BY para filtrar grupos de filas devolvidas. Somente quando a condição especificada é VERDADEIRA, as linhas são incluídas no grupo. A cláusula SQL GROUP BY organiza os dados em grupos com base no(s) valor(es) comum(is); é mais freqüentemente usada para obter informações resumidas e computar estatísticas agregadas. Se você estiver procurando uma atualização mais profunda sobre este assunto, veja este artigo sobre SQL GROUP BY. Pode haver alguma confusão sobre WHERE e HAVING, mas a diferença é facilmente explicada. A cláusula WHERE aplica uma condição em toda a coluna através da filtragem de linhas individuais. Ela não funciona com funções agregadas como SUM() e AVG(). Por outro lado, HAVING coloca condições de filtragem sobre os grupos criados pela cláusula GROUP BY. Ela pode ser usada com funções agregadas. Por exemplo, vamos considerar a tabela abaixo. Ela mostra uma lista de clientes agrupados por cidades em vários países. Se quiséssemos ver grupos de cidades com 3 ou mais clientes, precisaríamos de uma cláusula HAVING que satisfaça esta condição em cada uma das cidades (ou seja, os grupos). CustomerIDCityCountry 009BerlinGermany 045BerlinGermany 101BerlinGermany 098BernSwitzerland 003BernSwitzerland 154Buenos AiresArgentina 111Buenos AiresArgentina 039Buenos AiresArgentina ……… 191WallaPoland Em outras palavras, a cláusula HAVING é essencialmente uma cláusula WHERE que opera em registros devolvidos por GROUP BY. (Também temos uma comparação mais profunda entre HAVING e WHERE se você estiver interessado em ir mais fundo). Sintaxe do SQL HAVING HAVING não vai funcionar sem a cláusula GROUP BY. Ela deve seguir a cláusula GROUP BY em uma consulta e deve preceder a cláusula ORDER BY (se você estiver usando uma). Somente os grupos que atenderem aos critérios HAVING serão devolvidos. Por exemplo, vamos tentar a seguinte consulta sobre o customers mesa: SELECT COUNT(CustomerID), City, Country FROM Customers WHERE Country = 'Brazil' GROUP BY City, Country HAVING COUNT(CustomerID) > 1 O que está acontecendo nesta consulta? Primeiramente, a cláusula WHERE filtra as linhas aplicáveis para o País "Brasil". Segundo, a cláusula GROUP BY agrupa as entradas com base nos valores das colunas City e Country. Terceiro, a cláusula HAVING filtra os grupos - neste caso, estamos interessados apenas em cidades brasileiras que tenham mais de 1 cliente. A LearnSQL.com.br SQL para Iniciantes curso abrange a sintaxe e a aplicação da cláusula HAVING em um ambiente envolvente e interativo. Se você quiser praticar de forma prática, esta é minha recomendação. Mas antes, vejamos mais exemplos do HAVING. Exemplos de SQL HAVING Vamos mergulhar em alguns exemplos com diferentes funções agregadas para que possamos entender como a cláusula HAVING realmente funciona. Estaremos utilizando o seguinte cliente OrderDetails mesa. Ela tem um total de 518 linhas de dados de pedidos simples. Isto inclui informações tais como Quantity e ProductID encomendadas juntamente com um OrderID único para cada pedido. OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 510249142 6102495140 ………… 518104432812 Como analista de dados, uma de suas principais tarefas seria obter insights sobre os dados de vendas. Vamos explorar três problemas simples com o objetivo de encontrar algumas dessas percepções. Exemplo 1: TENDO COM COUNT() PROBLEMA: Liste todos os produtos com mais de 12 pedidos individuais feitos. PERGUNTA: SELECT COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING COUNT(ProductID) > 12 RESULTADO: Number of Records: 5 COUNT(ProductID)ProductID 1431 1459 1362 1371 1472 Se não tivéssemos incluído a cláusula HAVING, esta consulta essencialmente retornaria o número de registros igual ao número único de ProductIDs. Aqui, GROUP BY coloca os pedidos com o mesmo ProductID em grupos. Em seguida, a cláusula HAVING coloca a condição de filtragem em cada um desses grupos e retorna os que têm uma contagem maior que 12. Exemplo 2: TANDO com SUM() PROBLEMA: Liste todos os produtos que tiveram mais de 350 quantidades totais encomendadas. PERGUNTA: SELECT SUM(Quantity), ProductID FROM OrderDetails GROUP BY ProductID HAVING SUM(Quantity) > 350 ORDER BY SUM(Quantity) DESC RESULTADO: Number of Records: 3 COUNT(ProductID)ProductID 45831 43060 36935 No exemplo acima, GROUP BY agrupa de forma semelhante os pedidos por ProductID. Em seguida, a cláusula HAVING coloca a condição de filtragem (a soma da coluna Quantity deve ser superior a 350) em cada um desses grupos. Finalmente, ORDER BY retorna os resultados em ordem decrescente. Exemplo 3: TENDO com AVG() PROBLEMA: Liste todos os produtos que tiveram mais de 35 quantidades encomendadas em média e pelo menos 4 pedidos feitos. PERGUNTA: SELECT AVG(Quantity), COUNT(ProductID), ProductID FROM OrderDetails GROUP BY ProductID HAVING AVG(Quantity) > 35 AND COUNT(ProductID) > 3 ORDER BY AVG(Quantity) DESC RESULTADO: Number of Records: 6 AVG(Quantity)ProductIDCOUNT(ProductID) 41.25234 41359 38.75584 35.836012 35.6445 35.11339 No Exemplo 3, após agruparmos os pedidos por ProductID, a cláusula HAVING coloca duas condições de filtragem nos grupos: uma quantidade média de pedidos acima de 35 e um número de pedidos individuais maior que 3. Com base nos três exemplos acima, soubemos que ProductID 31, por exemplo, foi incluído no maior número de pedidos individuais (14) e também teve o maior número de quantidades pedidas em todos os pedidos feitos (458). Este é definitivamente um dos produtos mais populares na loja! Além disso, ProductIDs 23, 35, e 58 tinham as quantidades médias mais altas por pedido. As principais percepções como estas são valiosas, permitindo que as empresas saibam em quais produtos se concentrar e como comercializá-los. Dominando a Cláusula SQL HAVING Como acabamos de ver, a cláusula HAVING é indispensável para calcular valores agregados em grupos de dados. Assim, ela é sempre usada em combinação com uma cláusula GROUP BY e restringe os dados sobre os registros agrupados e não sobre os registros individuais. Se você quiser saber mais sobre o uso da cláusula SQL HAVING, experimente nosso curso SQL para Iniciantes . Ele cobre a cláusula HAVING em detalhes e explica mais sobre agrupamento, filtragem e ordenação de dados. Há também muitos problemas práticos e quizzes para que você possa ficar realmente confortável usando o SQL básico. Tags: sql aprender sql tendo