Imagina só... Tu tem uma lista enorme de compras do mercado. Tu quer saber quanto gastou no final das contas. Não vai somar tudo na mão, né? Mas os caixas já têm tudo isso no banco de dados. Por isso tu recebe o cupom com o valor certinho. Provavelmente, em algum lugar do app deles, quem ajuda é a heroína da nossa aula de hoje — a função SUM()! Ela é uma função agregadora que deixa tu somar os valores de uma coluna numérica.
Sintaxe do SUM()
A função SUM() é tão simples quanto o nome, mas bora ver cada parte dela:
SELECT SUM(coluna)
FROM tabela;
A função pega todos os valores da coluna que tu indicar e soma tudo. Mas, já vou avisando: não tem mágica pra somar textos ou datas aqui! Só números mesmo.
Exemplos de uso do SUM()
Bora começar com um exemplo fácil. Vamos usar a tabela salaries, que guarda os salários dos funcionários:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
Exemplo 1: Somando todos os salários
Tu quer saber o total da folha de pagamento da empresa. Olha como faz:
SELECT SUM(salary) AS total_salary
FROM salaries;
Resultado:
| total_salary |
|---|
| 240000 |
O que rolou aqui? O PostgreSQL somou todos os valores da coluna salary (50000 + 60000 + 55000 + 75000) e devolveu o resultado numa coluna nova chamada total_salary.
Exemplo 2: Somando com condição
Digamos que tu quer saber o total de salário só dos funcionários que ganham mais de 55.000. Bora usar nosso querido operador WHERE:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
Resultado:
| high_salary_total |
|---|
| 135000 |
O que rolou aqui? Primeiro o PostgreSQL aplicou o filtro WHERE salary > 55000, deixando só as linhas com salários 60000 e 75000. Depois ele somou esses dois salários (60000 + 75000).
3. Particularidades do SUM()
Como o NULL afeta o SUM()? Como já vimos, NULL é tipo "nada", e o SUM() não conta ele na soma. Olha essa tabela:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
Se a gente quiser saber o total da folha de pagamento:
SELECT SUM(salary) AS total_salary
FROM salaries;
Resultado:
| total_salary |
|---|
| 185000 |
Por que "185000" e não "NULL"? O PostgreSQL simplesmente ignora o NULL quando faz a soma.
Exemplos de queries mais avançadas com SUM()
Exemplo 1: Soma e filtro na mesma query
Imagina a tabela sales, que guarda os dados das vendas. Olha a estrutura dela:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
Tu quer saber o total de vendas (amount) só pro primeiro produto (product_id = 1):
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
Resultado:
| total_sales |
|---|
| 150 |
Exemplo 2: Soma e cálculos extras
De novo usando a tabela salaries. Tu quer saber quanto a folha de pagamento passa de 200.000:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
Resultado:
| surplus |
|---|
| 40000 |
Erros comuns ao usar SUM()
Usar SUM() com dados não numéricos: se tu tentar somar, por exemplo, valores de texto, vai dar erro. Fica ligado e confere o tipo de dado da tua coluna.
Ignorar NULL: muita gente que tá começando esquece do NULL e acha que ele entra na conta. Isso pode dar resultado estranho.
GO TO FULL VERSION