MySql SUM - Soma
Tecnologia da Informação

MySql SUM - Soma


A função SUM retorna a soma de valores de uma coluna.

SINTAXE
SELECT SUM(nome_da_coluna) FROM nome_da_tabela;

Para os 6 exemplos abaixo, utilizaremos a tabela "tb_fornecedor". Veja a imagem abaixo:

Caso tenha interesse faça o download dos exemplos ou veja os scripts no GitHub.




1º Exemplo

Cenário: um funcionário quer calcular o valor total das despesas de uma empresa.

Solução: o valor das despesas estão armazenados na coluna valor, logo devemos somar os valores desta coluna.
Para calcularmos a soma, executamos a sentença abaixo:

SELECT SUM(valor) FROM tb_fornecedor;

Após a execução, teremos o gasto total com as despesas. Conforme podemos visualizar na imagem abaixo:

O nome da coluna aparece como "SUM(valor)", mas vamos supor que precisamos que seja exibido "total".
Podemos modificar o nome desta coluna, ou seja, criar um alias (apelido). Colocamos o alias depois do "AS
SELECT SUM(valorAS total FROM tb_fornecedor;

Após a execução, o nome da coluna será exibido como "total".


2º Exemplo

Cenário: O funcionário de uma empresa quer calcular o valor total das despesas por segmento, ou seja:


Solução: antes de efetuarmos a soma, devemos agrupar os segmentos que estão armazenados na coluna "segmento". Para agruparmos utilizaremos o " GROUP BY".

Para calcularmos a soma por segmento, executamos a sentença abaixo:

SELECT segmento, SUM(valor) AS total 
FROM tb_fornecedor 
GROUP BY segmento;

Após a execução, teremos o gasto total com as despesas agrupado por segmento. Conforme podemos visualizar na imagem abaixo:




Para ordenar o total em ordem crescente, ou seja, do valor menor para o maior, deve-se usar "ORDER BY" seguido do nome da coluna, neste caso a coluna ordenada será 'total'.
Para ordenar os valores, utilizamos a sentença abaixo:

SELECT 
segmento, 
SUM(valor) AS total 
FROM tb_fornecedor 
GROUP BY segmento
ORDER BY total;

Após a execução, teremos os valores em ordem crescente. Conforme podemos visualizar na imagem abaixo:

Para ordenar o total em ordem decrescente, ou seja, do maior valor para o menor devemos acrescentar o "DESC" depois do "ORDER BY".
Para ordenar os totais em ordem decrescente, utilizamos a sentença abaixo:

SELECT 
segmento, 
SUM(valor) AS total 
FROM tb_fornecedor 
GROUP BY segmento
ORDER BY total DESC;

Após a execução, teremos os valores totais em ordem decrescente.  Conforme podemos visualizar na imagem abaixo:


3º Exemplo

Cenário: Este cenário é um pouco parecido com o anterior,  vamos calcular as despesas por segmento, mas agora considerando a quantidade de produtos.
Observação: perceba que foi incluída a coluna quantidade na tabela "tb_fornecedor".




Solução: dentro da função "SUM" devemos fazer a multiplicação da quantidade pelo valor do produto. Exemplo: gastamos R$ 335,00 com o segmento "Limpeza e higiene", pois compramos
Total para o segmento "Limpeza e higiene": 15,00 + 200,00 + 120,00 = 335,00

Para calcularmos a soma por segmento, executamos a sentença abaixo:

SELECT 
segmento, 
SUM(quantidade * valor) AS total 
FROM tb_fornecedor 
GROUP BY segmento
ORDER BY total;

Após a execução, teremos os totais por segmento. Conforme podemos visualizar na imagem abaixo:


4º Exemplo

Cenário: Vamos calcular o total das despesas por mês. Neste caso, para "setembro / 2013", "outubro / 2013" e "novembro / 2013".





O primeiro passo é saber como extrair o mês e o ano de uma data. 

Para extrair o mês e o ano de uma data utilizaremos a função "extract".

Exemplo da utilização de extract:

SELECT
data, 
extract(month from data) AS mes,
extract(year from data) AS ano
FROM tb_fornecedor;

Significado:

extract(parte_da_data from nome_da_coluna)
  • parte_da_data: podemos passar qual a parte da data que queremos, por exemplo,  day para o dia ou year para o ano, entre outros.
  • nome_da_coluna: nome da coluna de uma tabela. Neste caso vamos escolher a coluna "data" da tabela "tb_fornecedor".
Após a execução, teremos uma coluna com o ano, e uma coluna com o mês. Conforme podemos visualizar na imagem abaixo:




Agora que já sabemos utilizar as função "extract", vamos utilizá-la para fazer o calculo das despesas para os meses de setembro, outubro e novembro de 2013.

SELECT 
extract(month from data) AS mes,
SUM(quantidade * valor) AS total 
FROM tb_fornecedor
WHERE extract(year from data) = 2013 
GROUP BY mes
ORDER BY mes;

Após a execução, teremos o total para cada mês.



Caso queiramos exibir os meses por extenso e na língua portuguesa, ou seja, setembro, outubro e novembro devemos configurar a variável de sistema do mysql "lc_time_name". Em caso de dúvida veja o artigo "Mysql - formatar data e hora":

SELECT
/*Formata a data em português devido a configuração da variável de sistema do mysql chamada "lc_time_names". Em caso de dúvida veja o artigo de formatação de data*/ 
date_format(data'%M/%Y') AS mes, 
SUM(quantidade * valor) AS total 
FROM tb_fornecedor
WHERE extract(year FROM data) = 2013 
GROUP BY  mes
/*Orderna pela ordem numérica do mês (...9,10, 11)* observe o "m" do date_format em minúsculo*/ 
ORDER BY date_format(data'%m/%Y') ;

Após a execução, o mês será exibido por extenso. Conforme podemos visualizar na imagem abaixo:

5º Exemplo

Cenário: Vamos calcular o total das despesas por mês e por segmento. Para isso vamos agrupar por mês e segmento, ou seja o "GROUP BY" será acompanhado pelo mês e pelo segmento.

SELECT
extract(month FROM data)  AS mes,
segmento, 
SUM(quantidade * valor) AS total 
FROM tb_fornecedor
WHERE extract(year FROM data) = 2013 
GROUP BY messegmento
ORDER BY messegmento;

Após a execução, as despesas serão agrupadas por mês e segmento. Conforme podemos visualizar na imagem abaixo:


Caso queiramos exibir os meses por extenso, ou seja, setembro, outubro e novembro podemos utilizar a função "date_format" na sentença:

SELECT
/*Formata a data em português devido a configuração da variável de sistema do mysql chamada "lc_time_names". Em caso de dúvida veja o artigo de formatação de data*/ 
date_format(data'%M/%Y') AS mes, 
segmento, 
SUM(quantidade * valor) AS total 
FROM tb_fornecedor
WHERE extract(year FROM data) = 2013 
GROUP BY mes,  segmento
/*Orderna pela ordem numérica do mês (...9,10, 11)* observe o "m" do date_format em minúsculo*/ 
ORDER BY date_format(data'%m/%Y')segmento;

Após a execução, o meses serão exibidos por extenso. Conforme podemos visualizar na imagem abaixo:



6º Exemplo

Cenário: queremos saber quais os meses em que as despesas ultrapassaram R$2000, ou seja foram maior que R$2000?




Solução: para sabermos quais os meses em que as despesas ultrapassaram R$2000 vamos adicionar a clausula "HAVING" a sentença.

SELECT
/*Formata a data em português devido a configuração da variável de sistema do mysql chamada "lc_time_names". Em caso de dúvida veja o artigo de formatação de data*/ 
date_format(data'%M/%Y') AS mes,
SUM(quantidade * valor) AS total 
FROM tb_fornecedor
WHERE extract(year FROM data) = 2013 
GROUP BY mes  
HAVING SUM(quantidade * valor) > 2000
/*Orderna pela ordem numérica do mês (...9,10, 11)* observe o "m" do date_format em minúsculo*/ 
ORDER BY date_format(data'%m/%Y');

Após a execução, só serão exibidos os meses nos quais as despesas ultrapassaram R$ 2000,00. Conforme podemos visualizar na imagem abaixo:


Em breve, postarei mais exemplos da função sum.



loading...

- Oracle - Calcular Total /subtotal Com Rollup
Neste artigo, vamos mostrar 3 exemplos de como utilizar a função "SUM" acompanhada do comando "ROLLUP" para calcular o subtotal / total em uma consulta. Caso tenha interesse, faça o download ou veja os scripts deste artigo...

- Postgresql - Calcular Subtotal / Total - Equivalente Ao With Rollup No Mysql
Neste artigo, vamos mostrar 2 exemplos de como utilizar a função "SUM" para calcular o subtotal / total em uma consulta. Para quem usa o Mysql, a consulta que vamos fazer é semelhante ao "WITH ROLLUP". Caso ainda não conheça a função...

- Mysql - Sum Com Rollup - Calcular O Subtotal / Total
Neste artigo, vamos mostrar 3 exemplos de como utilizar a função "SUM" acompanhada do comando "WITH ROLLUP" para calcular o subtotal / total em uma consulta. Caso ainda não conheça a função "SUM", veja o artigo "Mysql SUM - Soma " Caso...

- Postgresql Avg - Média
A função AVG retorna a média de valores de uma coluna.  Serão descritos 6 exemplos de utilização desta função.  Caso tenha interesse faça o download dos exemplos ou veja os scripts no github. SINTAXESELECT AVG(nome_da_coluna)...

- Postgresql - Formatar Data
Serão descritos 2 exemplos de como formatar uma data. 1º Exemplo: exibir a data no formato dd/mm/aaaa (dia/mês/ano): Solução: vamos utilizar a função to_char para formatar a data. Na imagem abaixo, vemos a tabela "tb_fornecedor", vamos...



Tecnologia da Informação








.