As funções de agregação em SQL são usadas para realizar cálculos em várias linhas de uma coluna de tabela e retornar um único valor. Essas funções são essenciais para resumir dados, gerar relatórios e realizar análises estatísticas. Esta lição aborda as funções de agregação mais comuns com exemplos práticos baseados no banco de dados Sakila.
COUNT() — Conta o número de linhasSintaxe:
COUNT(expressão)
Exemplo:
SELECT COUNT(*) AS total_payments
FROM payment;
Resultado: Retorna o número total de linhas na tabela payment.
COUNT(column) vs COUNT(*)Essas duas formas são parecidas, mas não são iguais:
COUNT(*) conta todas as linhas do conjunto de resultados;COUNT(column) conta apenas as linhas em que column é NOT NULL.Por isso, se a coluna tiver valores NULL, COUNT(column) pode retornar um número menor que COUNT(*).
Exemplo (Sakila):
SELECT
COUNT(*) AS total_rentals,
COUNT(return_date) AS returned_rentals
FROM rental;
Explicação:
total_rentals conta todas as linhas da tabela rental;returned_rentals conta apenas as linhas em que return_date possui valor;return_date = NULL, então ficam fora de COUNT(return_date).SUM() — Calcula a soma dos valoresSintaxe:
SUM(expressão)
Exemplo:
SELECT SUM(amount) AS total_amount
FROM payment;
Resultado: Retorna a soma total da coluna amount.
Comentário: a função SUM(amount) ignora NULL. Se todos os valores do conjunto forem NULL, o resultado será NULL.
AVG() — Calcula o valor médioSintaxe:
AVG(expressão)
Exemplo:
SELECT AVG(amount) AS average_amount
FROM payment;
Resultado: Retorna o valor médio da coluna amount.
Comentário: a função AVG(amount) considera no cálculo apenas as linhas em que amount não é NULL.
Se você precisar incluir as linhas com NULL na quantidade de linhas (denominador), use uma das opções abaixo:
SELECT
AVG(amount) AS avg_ignore_null,
AVG(COALESCE(amount, 0)) AS avg_include_null_as_zero,
SUM(amount) / COUNT(*) AS avg_sum_div_all_rows
FROM payment;
Explicação:
avg_ignore_null é o comportamento padrão de AVG, em que NULL é ignorado;avg_include_null_as_zero substitui NULL por 0, então todas as linhas entram no cálculo;avg_sum_div_all_rows divide a soma pelo total de linhas (COUNT(*)), o que também inclui as linhas com NULL no denominador.MAX() — Encontra o valor máximoSintaxe:
MAX(expressão)
Exemplo:
SELECT MAX(amount) AS max_amount
FROM payment;
Resultado: Retorna o maior valor na coluna amount.
Comentário: a função MAX(amount) ignora NULL. Se todos os valores forem NULL, o resultado será NULL.
MIN() — Encontra o valor mínimoSintaxe:
MIN(expressão)
Exemplo:
SELECT MIN(amount) AS min_amount
FROM payment;
Resultado: Retorna o menor valor na coluna amount.
Comentário: a função MIN(amount) ignora NULL. Se todos os valores forem NULL, o resultado será NULL.
MIN(column) e ORDER BY column LIMIT 1 — o resultado é sempre igual?Nem sempre.
Compare:
SELECT MIN(column_name) FROM table_name;
SELECT column_name FROM table_name ORDER BY column_name LIMIT 1;
MIN(column_name) ignora NULL e procura o menor valor entre os não NULL;ORDER BY column_name LIMIT 1 retorna a primeira linha após a ordenação;NULL for ordenado primeiro no seu SGBD (por exemplo, MySQL/MariaDB em ASC), a segunda consulta pode retornar NULL, enquanto MIN() retorna o menor valor não NULL.Elas coincidem quando:
NULL na coluna;NULL é ordenado por último;NULL.Versão confiável, equivalente a MIN():
SELECT column_name
FROM table_name
WHERE column_name IS NOT NULL
ORDER BY column_name
LIMIT 1;
COUNT(*) para descobrir quantos clientes existem no banco de dados.SELECT COUNT(*) AS total_customers
FROM customer;
SUM(amount) com GROUP BY staff_id para ver as vendas de cada funcionário.SELECT staff_id, SUM(amount) AS staff_total
FROM payment
GROUP BY staff_id;
AVG(amount) com GROUP BY customer_id.SELECT customer_id, AVG(amount) AS avg_payment
FROM payment
GROUP BY customer_id;
As funções de agregação do SQL são ferramentas poderosas para resumir e analisar dados. Dominar COUNT, SUM, AVG, MIN e MAX ajudará você a gerar relatórios e insights valiosos do seu banco de dados. Pratique essas funções com o banco de dados Sakila para fortalecer suas habilidades em SQL.