Pular para o conteúdo principal

Funções de agregação em SQL

Aprenda a usar funções de agregação para resumir resultados e extrair insights valiosos sobre dados em SQL.
Atualizado 17 de set. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

Criar relatórios a partir de um conjunto de dados é uma habilidade essencial para quem trabalha com dados. No fim das contas, você quer responder a perguntas críticas de negócio com os dados que tem em mãos. Muitas vezes, essas respostas aparecem em gráficos; mas em outras, relatórios em forma de tabelas também são necessários. Em ambos os casos, pode ser preciso resumir os dados com cálculos simples. Em SQL, você faz esses resumos/agregações usando as funções de agregação. Com elas, você consegue responder perguntas como:

  • Qual é o valor máximo de some_column_from_the_table? ou
  • Quais são os valores mínimos de some_column_from_the_table em relação a another_column_from_the_table?

e muitas outras.

Vamos começar a fazer algumas agregações de dados.

Observação: para acompanhar este tutorial, você precisa saber escrever consultas básicas em PostgreSQL (que será o SGBD usado). Este tutorial pode servir como um bom lembrete.

Preparando o banco de dados

Primeiro, vamos configurar um banco PostgreSQL e restaurar este backup, que contém a tabela usada neste tutorial. Se você quiser aprender a restaurar um backup no PostgreSQL, siga a primeira seção deste tutorial.

Se você conseguiu restaurar o backup, deverá ver uma tabela chamada international_debt no banco (você vai precisar criar um banco antes, caso ainda não tenha). Vamos dar uma olhada rápida nas primeiras linhas da tabela (uma consulta select simples resolve):

database

A tabela traz informações sobre estatísticas de dívida de diferentes países ao redor do mundo para o ano atual, em várias categorias (veja as colunas indicator_name e indicator_code). A coluna debt mostra o valor da dívida (em USD) que um país tem em uma categoria específica. Esses dados são da área de economia e são usados para analisar as condições econômicas de diferentes países. Os dados foram coletados pelo Banco Mundial.

Agora que o banco está pronto, vamos rodar algumas consultas simples para entender melhor os dados. Abra o pgAdmin e mãos à obra.

Informação simples importa

Pela figura acima, dá para ver que existem várias entradas repetidas para um mesmo país, mas em categorias diferentes. Uma pergunta que surge rapidamente é:

Quais são os diferentes países que a tabela registra?

Se você simplesmente rodar um select da coluna country_name, não terá a resposta certa, pois o resultado trará duplicados. Vamos usar a palavra-chave DISTINCT para resolver isso.

select distinct country_name from international_debt;

E isso deve retornar algo assim:

return

Agora você tem uma resposta razoável para a pergunta acima. E mais uma, antes de entrar nas funções de agregação:

Quantos tipos diferentes de indicadores de dívida existem na tabela?

A consulta para responder é semelhante à anterior. Basta trocar o nome da coluna. Que tal como exercício? O resultado deve ser parecido com o seguinte:

return

Funções de agregação

Vamos começar rodando uma consulta com uma função de agregação e avançar a partir daí. No caminho, você aprende mais sobre a sintaxe e os padrões que precisa seguir ao aplicar funções de agregação em SQL.

select sum(debt) from international_debt;

E o resultado:

result

Com a função de agregação SUM(), você calcula a soma aritmética de uma coluna numérica. Com a consulta acima, você obteve o total de dívida pendente dos países listados na tabela.

Importante: SUM() não considera valores NULL no cálculo. Agora vamos responder à pergunta:

Qual é o maior valor de dívida?

Aqui entra a função de agregação MAX() para te salvar:

select max(debt) from international_debt;

E a resposta é:

answer

Assim como SUM(), MAX() não considera entradas NULL no cálculo. Existe também a função MIN(). Que tal me contar o valor mínimo da coluna debt na seção de Comentários? Agora é uma boa verificar se há alguma entrada inválida na coluna debt para garantir que os resultados estejam corretos até aqui.

Observação: use essas funções em minúsculas, como mostrado acima.

Ao executar esta consulta: select * from international_debt where debt is null;, você deve obter um resultado vazio. Agora vamos descobrir o número total de países distintos presentes na tabela.

select count(distinct(country_name)) from international_debt;

E você vê que há um total de 124 países distintos na tabela. Repare bem na combinação de funções usada acima. Sim, é permitido encadear mais de uma função de agregação de forma lógica.

Agora, suponha que você queira ver o valor médio da coluna debt. A função é AVG():

select avg(debt) from international_debt;

Você verá o valor 1306633214.966397971 (USD). É uma boa prática apresentar esses resultados com nomes de coluna adequados. Pelos resultados acima, dá para ver que o PostgreSQL usa o nome da função de agregação como nome da coluna no retorno. Então, vale a pena dar um alias apropriado a essas colunas. Por exemplo:

select avg(debt) as Average_Debt_By_A_Country from international_debt;

O resultado fica bem mais fácil de interpretar:

result

Vamos deixar um pouco mais complexo. Para responder perguntas como Quais são os valores mínimos de some_column_from_the_table em relação a another_column_from_the_table?, você precisa combinar uma função de agregação com a cláusula GROUP BY. Vamos ver como.

Funções de agregação + GROUP BY + mais

Suponha que você precise produzir um relatório mostrando o country_name e a soma de suas dívidas. Um exemplo:

report

Relatórios assim são muito comuns no dia a dia. Qual seria a consulta para obter algo assim? Você terá que usar SUM() em debt. E também precisa exibir o country_name junto com a soma das dívidas. Vamos executar:

select country_name, sum(debt) from international_debt;

Não aparece o seguinte erro?

ERROR: column "international_debt.country_name" must appear in the GROUP BY clause or be used in an aggregate function

Vamos entender o que isso significa. Quando você usa uma função de agregação (como SUM()) junto com uma coluna não agregada, como country_name, é preciso passar essa coluna para a cláusula GROUP BY. A consulta correta é:

select country_name, sum(debt) as total_debt from international_debt group by country_name;

E o resultado fica certinho:

result

Note o uso de alias na consulta.

Agora, suponha que você precise ordenar esse relatório pelo total_debt de forma decrescente. Lembra da cláusula ORDER BY? Sim, você também pode combiná-la com funções de agregação:

select country_name, sum(debt) as total_debt from international_debt
group by country_name order by total_debt desc;

O resultado agora deve estar invertido:

result

Observação a coluna usada na cláusula ORDER BY.

Agora outra pergunta importante:

Qual é o maior valor de dívida entre as diferentes categorias (em ordem decrescente)?

Aqui você vai precisar de MAX(). Escrever a consulta para responder a isso não deve ser difícil agora.

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc;

E você obtém um relatório limpo:

report

Você também pode limitar o número de linhas em relatórios assim. Digamos que você queira apenas as cinco primeiras entradas do relatório acima. É só usar a cláusula LIMIT.

select indicator_code, max(debt) as maximum_debt from international_debt
group by indicator_code order by maximum_debt desc
limit 5;

Hora do relatório final deste tutorial. Você precisa incluir os nomes dos países no relatório acima. Como fazer? A consulta a seguir resolve:

select country_name, indicator_code, max(debt) as maximum_debt from international_debt
group by country_name, indicator_code order by maximum_debt desc;

Mais um bom relatório:

report

Na consulta acima, você adicionou a coluna country_name após o SELECT e também no GROUP BY. Você pode estender esse formato para quantas colunas precisar.

A ordem de GROUP BY, ORDER BY e LIMIT é muito importante ao gerar relatórios desse tipo. Se você trocar a ordem por engano, vai encarar erros. Veja só:

select country_name, sum(debt) as total_debt from international_debt
order by total_debt desc group by country_name;

E você recebe:

ERROR:  syntax error at or near "group"
LINE 1: ... from international_debt order by total_debt desc group by c...

Na consulta acima, você colocou ORDER BY antes de GROUP BY, o que não é permitido. Na verdade, isso também não se aplica quando você não está usando funções de agregação. A ordem correta é: GROUP BY -> ORDER BY -> LIMIT. Guarde isso.

Próximos passos

Parabéns! Você chegou ao fim deste tutorial. Aqui você conheceu diferentes funções de agregação no PostgreSQL e como usá-las para gerar relatórios úteis. Essas são habilidades fundamentais para qualquer cientista de dados. Para levar suas habilidades em SQL para o próximo nível de forma estruturada, confira estes cursos da DataCamp:

Tópicos
SQL

Cursos de SQL

Curso

Manipulação de dados em SQL

4 h
335K
Domine consultas SQL complexas no PostgreSQL para responder várias perguntas de ciência de dados e preparar conjuntos de dados robustos.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Como usar a função COALESCE() no SQL (com exemplos)

Saiba como usar a função SQL COALESCE() para lidar com valores nulos, combinar colunas e limpar seus dados com exemplos e dicas do mundo real.
Travis Tang 's photo

Travis Tang

5 min

Tutorial

FUNÇÃO SQL COUNT()

COUNT() permite que você conte o número de linhas que correspondem a determinadas condições. Saiba como usá-lo neste tutorial.
Travis Tang 's photo

Travis Tang

3 min

Tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

6 min

Tutorial

FUNÇÃO SQL FORMAT()

FORMAT() é uma das funções mais comumente usadas no SQL. Aprenda suas principais aplicações neste tutorial.
Travis Tang 's photo

Travis Tang

3 min

Tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

Tutorial

FUNÇÃO SQL DATEDIFF()

DATEDIFF() é uma das funções de manipulação de dados de data mais usadas no SQL. Domine-o lendo este tutorial.
Travis Tang 's photo

Travis Tang

3 min

Ver MaisVer Mais