Olá! Boas-vindas ao curso Dominando Funções de Agregação GROUP BY
e HAVING
no SQL! Eu sou Igor do Nascimento Alves, instrutor na Escola de Dados, e estarei com você ao longo deste conteúdo.
Audiodescrição: Igor se descreve como uma pessoa branca, com cabelos pretos e curtos. Veste uma camiseta cinza com o desenho de um controle de video-game. O cenário é iluminado em tons de azul e verde, com uma planta decorativa ao fundo. À sua frente, um microfone.
Este curso foi desenvolvido para quem já tem familiaridade com funções de agregação, GROUP BY
e HAVING
, mas deseja consolidar esses conhecimentos por meio da prática. Nosso objetivo é reforçar o que você já aprendeu e aplicar esses conceitos em diversas situações, para garantir que você se sinta confiante ao utilizá-los.
Ao longo do curso, vamos revisar os conceitos, explorar exemplos práticos e, em seguida, apresentar uma série de desafios e exercícios em contextos variados. Assim, você poderá colocar em prática tudo o que aprendeu!
Se você já concluiu a Formação Conhecendo SQL, este curso é uma excelente oportunidade para aprofundar e praticar os conteúdos abordados!
Neste módulo, exploraremos as funções de agregação no SQL, como SUM
, AVG
, COUNT
, MAX
e MIN
, que permitem resumir os dados de uma coluna. Além disso, veremos a GROUP BY
, que utiliza essas funções de agregação para unir e resumir os dados. Por fim, abordaremos o uso da função HAVING
, que funciona como um filtro aplicado aos resultados gerados pelo GROUP BY
, de forma semelhante ao WHERE
, mas em um estágio posterior.
A seguir, apresentaremos exemplos práticos para cada uma dessas funções.
SUM
Utilizaremos a tabela Vendas
, que contém as colunas ID
, Valor
e Data
.
ID | Valor | Data |
---|---|---|
1 | 3000 | 2023-01-15 |
2 | 2000 | 2023-02-10 |
3 | 50 | 2023-03-05 |
4 | 30 | 2024-03-15 |
5 | 500 | 2024-04-20 |
Suponha que queremos calcular o total de vendas. Para isso, aplicaremos a função SUM
à coluna Valor
com a consulta:
SELECT SUM(Valor) AS TotalVendas FROM Vendas;
Utilizamos
AS
para atribuir um "apelido"; neste casoTotalVendas
.
O operador SUM
soma os valores da coluna especificada. O resultado dessa consulta será 5.580, representando a soma dos valores na tabela.
AVG
Agora, utilizaremos a tabela Clientes
, que possui as colunas Nome
, Cidade
, Idade
e um indicador de status Ativo
.
Nome | Cidade | Idade | Ativo |
---|---|---|---|
Ana | São Paulo | 25 | 1 |
Bruno | Rio de Janeiro | 30 | 1 |
Carla | São Paulo | 22 | 0 |
Daniel | Belo Horizonte | 35 | 1 |
Elisa | Porto Alegre | 28 | 0 |
Suponha que queremos calcular a média de idade dos clientes. Utilizaremos a função AVG
na seguinte consulta:
SELECT AVG(idade) AS MediaIdade FROM Clientes;
O operador AVG
calcula a média dos valores de uma coluna. O resultado será 28, indicando que a média de idade dos clientes é de 28 anos.
COUNT
O operador COUNT
é utilizado para contar a quantidade de registros retornados por uma consulta. Por exemplo, para contar o total de clientes na tabela Clientes
, utilizamos:
SELECT COUNT(*) AS TotalClientes FROM Clientes;
Utilizamos
*
para indicar que todos os registros devem ser contados.
Sem a cláusula WHERE
, o COUNT
retorna todos os registros da tabela. Caso adicionemos um filtro com WHERE
, ele contará apenas os registros que atendem ao critério especificado. No caso, o resultado será 5, indicando que há cinco clientes registrados.
MAX
e MIN
Para praticar as funções MAX
e MIN
usaremos a tabela Funcionarios
, que possui as colunas Nome
, Salario
e Departamento
:
Nome | Salario | Departamento |
---|---|---|
Carlos | 5000 | TI |
Fernanda | 7000 | Financeiro |
João | 3000 | RH |
Maria | 4500 | Marketing |
Paula | 8000 | TI |
Queremos identificar o maior e o menor salário. Para isso, utilizamos os operadores MAX
e MIN
. Primeiro, utilizamos o operador MAX
, na coluna Salario
atribuindo o apelido MaiorSalario
. Em seguida, utilizamos o operador MIN
nesta mesma coluna atribuindo o apelido MenorSalario
. Por fim, concluímos a consulta com FROM Funcionarios
para indicar a tabela. Assim, os operadores MAX
e MIN
retornarão, respectivamente, o maior e o menor valor da coluna.
SELECT MAX(Salario) AS MaiorSalario, MIN(salario) AS MenorSalario FROM Funcionarios;
Esses operadores retornam, respectivamente, o maior e o menor valor de uma coluna, que são 8.000 e 3.000.
GROUP BY
A ideia do GROUP BY
é juntar os nossos dados com base em uma característica em comum, como, por exemplo, agrupar pela categoria dos produtos. Suponha que temos a tabela Produtos
, com as colunas Nome
, Categoria
e Valor
, e queremos calcular o total de vendas por categoria.
Nome | Categoria | Valor |
---|---|---|
Notebook | Eletrônicos | 3000 |
Smartphone | Eletrônicos | 2000 |
Livro A | Livros | 50 |
Livro B | Livros | 30 |
Cadeira Gamer | Móveis | 500 |
As funções de agregação que vimos anteriormente, como SUM
e AVG
, são muito úteis em conjunto com o GROUP BY
, pois nos ajudam a resumir os dados de forma significativa. Por exemplo, podemos querer saber o total de vendas de produtos por categoria.
Para isso, fazemos uma consulta como:
SELECT Categoria, SUM(Valor) AS TotalVendas
FROM Produtos
GROUP BY Categoria;
Neste caso, selecionamos a coluna Categoria
para determinar como os dados serão agrupados. Utilizamos a função SUM
na coluna Valor
, atribuímos a ela um apelido como TotalVendas
, e indicamos a origem dos dados com FROM Produtos
.
A cláusula GROUP BY Categoria
informa que os registros devem ser agrupados com base na Categoria. Ele processará todos os registros, agrupará aqueles com a mesma categoria (como "eletrônicos", por exemplo), e depois aplicará a soma dos valores para cada grupo.
Assim, o GROUP BY
serve para agrupar linhas que possuem valores comuns em colunas específicas, sendo, neste caso, a coluna Categoria
. O resultado da consulta será este:
Categoria | TotalVendas |
---|---|
Eletrônicos | 5000 |
Livros | 80 |
Móveis | 500 |
A consulta resultou em três linhas, correspondendo às três categorias possíveis: eletrônicos, livros e móveis, juntamente com o total de vendas de cada uma. Por exemplo, o total do preço dos eletrônicos, considerando que tínhamos dois produtos nessa categoria, é R$ 5.000. Para a categoria de livros, o total é R$ 80, e para móveis, é R$ 500.
HAVING
O operador HAVING
, como mencionado anteriormente, é semelhante ao operador WHERE
, mas com uma diferença essencial: enquanto o WHERE
filtra os dados antes de serem agrupados, o HAVING
aplica o filtro após o agrupamento.
Por exemplo, retomando a consulta onde calculamos o total de vendas, suponha que agora queremos visualizar apenas as categorias que ultrapassaram R$ 4.000. Para isso, repetimos a estrutura básica da consulta:
SELECT Categoria, SUM(Valor) AS TotalVendas
FROM Produtos
GROUP BY Categoria
HAVING SUM(Valor) > 4000;
Perceba que boa parte da consulta é idêntica à anterior. No entanto, desta vez adicionamos o filtro com o HAVING
, especificando que a soma dos valores (SUM(Valor)
) deve ser maior que R$ 4.000. Assim, o HAVING
atua filtrando os grupos criados pelo GROUP BY
.
No resultado final, será exibida apenas uma categoria: "Eletrônicos", cuja soma ultrapassa R$ 5.000. As demais categorias, cujas vendas não atingiram esse valor, serão excluídas. Essa é a principal funcionalidade do HAVING
: filtrar os resultados após o agrupamento.
SUM
: Soma os valores de uma coluna.AVG
: Calcula a média de uma coluna.COUNT
: Conta a quantidade de registros.MAX
e MIN
: Identificam o maior e o menor valor de uma coluna.GROUP BY
: Agrupa os dados por valores comuns em uma coluna.HAVING
: Filtra os dados após o agrupamento feito pelo GROUP BY
.Para facilitar seu aprendizado, preparamos uma lista de exercícios para que você possa praticar e consolidar o conteúdo. Em caso de dúvidas, consulte o glossário na próxima atividade, onde cada função é detalhadamente explicada. Além disso, você pode contar com nossa comunidade ativa no fórum e no Discord para esclarecer qualquer questão.
Vamos colocar esses conceitos em prática?
O curso Praticando SQL: funções de agregação possui 10 minutos de vídeos, em um total de 13 atividades. Gostou? Conheça nossos outros cursos de SQL e Banco de Dados em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.