Antes de se perder na sintaxe do SQL e nas variáveis, bora lembrar: funções agregadas são tipo seus melhores parças pra contar tudo e mais um pouco. Elas ajudam a calcular dados totais, médias e fazer aquela mágica em cima de um monte de linhas.
Funções agregadas servem pra fazer operações matemáticas em grupos de linhas. As principais são:
SUM(): soma os valores.AVG(): calcula o valor médio.COUNT(): conta quantas linhas tem no resultado.
Funções agregadas são super úteis quando você tá lidando com muitos dados e quer um relatório resumido: quantos pedidos você teve, qual o total deles, ou qual foi o maior valor de compra do dia. Bora ver algumas funções agregadas na prática.
Contando linhas: função COUNT()
A função COUNT() serve pra contar quantas linhas tem numa tabela. Vamos ver como ela funciona com exemplos.
-- Contando todas as linhas na tabela de pedidos
SELECT COUNT(*) AS total_de_pedidos
FROM orders;
-- Contando clientes únicos
SELECT COUNT(DISTINCT customer_id) AS clientes_unicos
FROM orders;
-- Contando pedidos com valor acima de 100
SELECT COUNT(*) AS pedidos_valor_alto
FROM orders
WHERE total_amount > 100;
A função COUNT() é muito usada pra contar registros, valores únicos, e também junto com filtros, tipo "quantos estudantes se inscreveram nos cursos de Python".
Somando dados: função SUM()
A função SUM() calcula a soma dos valores de uma coluna. Agora bora somar todas as compras dos clientes.
-- Soma do faturamento total
SELECT SUM(total_amount) AS faturamento_total
FROM orders;
-- Soma das compras de um cliente específico
SELECT SUM(total_amount) AS gasto_do_cliente
FROM orders
WHERE customer_id = 101;
-- Soma dos pedidos por categoria
SELECT category, SUM(total_amount) AS faturamento_categoria
FROM orders
GROUP BY category;
SUM() é a ferramenta principal pra analisar vendas, faturamento e qualquer outro total. Por exemplo, quer saber quanto o centro comercial faturou no mês passado? Moleza.
Médias: função AVG()
A função AVG() ajuda a calcular a média dos dados. Tipo, média das notas dos alunos ou o ticket médio dos clientes.
-- Valor médio dos pedidos
SELECT AVG(total_amount) AS valor_medio_pedido
FROM orders;
-- Valor médio dos pedidos por categoria
SELECT category, AVG(total_amount) AS valor_medio_pedido
FROM orders
GROUP BY category;
-- Ticket médio dos clientes nos últimos 7 dias
SELECT AVG(total_amount) AS ticket_medio_ultima_semana
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Média é útil pra analisar qualidade do atendimento, achar anomalias e calcular métricas chave, tipo lucro médio por cliente.
Usando funções agregadas na análise
Agora que a gente já conhece as funções principais, bora ver como usar elas pra criar relatórios analíticos básicos.
Exemplo 1: faturamento total e quantidade de pedidos
Imagina que você quer saber quantos pedidos foram feitos e qual foi o faturamento total do mês.
SELECT
COUNT(*) AS total_de_pedidos,
SUM(total_amount) AS faturamento_total
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
Exemplo 2: média de faturamento por categoria
E se a gente quiser dividir o faturamento por categoria de produto?
SELECT
category,
COUNT(*) AS total_de_pedidos,
SUM(total_amount) AS faturamento_total,
AVG(total_amount) AS valor_medio_pedido
FROM orders
GROUP BY category;
Exemplo 3: pedidos dos últimos 7 dias
Às vezes você precisa analisar métricas de períodos curtos, tipo da última semana.
SELECT
COUNT(*) AS pedidos_ultima_semana,
SUM(total_amount) AS faturamento_ultima_semana,
AVG(total_amount) AS ticket_medio_ultima_semana
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Casos práticos com desafios reais
Desafio: Análise de vendas por região
Imagina que você é dono de uma rede de lojas e quer analisar como o faturamento ficou distribuído por região.
SELECT
region,
COUNT(*) AS total_de_pedidos,
SUM(total_amount) AS faturamento_total,
AVG(total_amount) AS valor_medio_pedido
FROM orders
GROUP BY region
ORDER BY faturamento_total DESC;
Desafio: Top 10 clientes por faturamento
Agora vamos colocar um pouco de lógica pra pegar o top 10 clientes pelo valor total dos pedidos.
SELECT
customer_id,
SUM(total_amount) AS gasto_total
FROM orders
GROUP BY customer_id
ORDER BY gasto_total DESC
LIMIT 10;
Desafio: Comparando faturamento por dia da semana
Quer saber em quais dias da semana seu negócio fatura mais? Olha só esse exemplo:
SELECT
TO_CHAR(order_date, 'Day') AS dia_da_semana,
SUM(total_amount) AS faturamento_total,
AVG(total_amount) AS valor_medio_pedido
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY faturamento_total DESC;
GO TO FULL VERSION