Função MySQL SUM()

Resumo : neste tutorial você aprenderá como usar a SUM()função MySQL para calcular a soma dos valores em um conjunto.

Introdução à função MySQL SUM()

A SUM()função é uma função agregada que permite calcular a soma dos valores em um conjunto. A sintaxe da SUM()função é a seguinte:

SUM(DISTINCT expression)Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Veja como SUM()funciona a função:

  • Se você usar a SUM()função em uma SELECTinstrução que não retorne nenhuma linha, a SUM()função retornará NULL, e não zero.
  • A DISTINCTopção direciona a SUM()função para calcular a soma de valores únicos em um conjunto.
  • A SUM()função ignora os NULLvalores no cálculo.

Ilustração da função MySQL SUM()

Primeiro, crie uma nova tabela chamada sum_demo:

CREATE TABLE sum_demo (
    n INT
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A sum_demotabela inclui uma coluna chamada ncom o tipo INT.

Em seguida, insira algumas linhas na sum_demotabela:

INSERT INTO sum_demo(n) 
VALUES 
  (1), 
  (1), 
  (2), 
  (NULL), 
  (3);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Terceiro, calcule os valores totais na ncoluna usando a SUM()função:

SELECT 
    SUM(n)
FROM
    sum_demo;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como você pode ver, a SUM()função calcula o total de 1, 1, 2 e 3. E ignora NULL.

Por fim, calcule o total de valores únicos na ncoluna usando a SUM()função com a DISTINCTopção:

SELECT 
    SUM(DISTINCT n)
FROM
    sum_demo;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste caso, a opção SUM()com DISTINCTcalcula a soma dos valores únicos que são 1, 2 e 3.

Exemplos de funções MySQL SUM()

Usaremos a tabela orderdetailsdo banco de dados de exemplo .

1) Exemplo simples de função MySQL SUM()

Este exemplo usa a SUM()função para obter o número total de itens dos detalhes do pedido:

SELECT 
    SUM(quantityOrdered) SalesQuantity
FROM
    orderdetails;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Função MySQL SUM() com exemplo de expressão

O seguinte mostra os itens de linha do pedido do número do pedido 10110:

SELECT 
    orderNumber, 
    quantityOrdered, 
    priceEach
FROM
    orderdetails
WHERE
    orderNumber = 10100;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para calcular o total do número do pedido 10110, você usa a SUM()função da seguinte forma:

SELECT 
	SUM(quantityOrdered * priceEach)  orderTotal
FROM
	orderdetails
WHERE
	orderNumber = 10100;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo, a SUM()função calcula o total da seguinte expressão de todos os itens de linha do pedido com número de pedido 10110:

quantityOrdered * priceEachLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

3) MySQL SUM() com o exemplo da cláusula GROUP BY

A SUM()função é frequentemente usada com a GROUP BYcláusula para calcular a soma de cada grupo.

Por exemplo, você pode calcular o valor total de cada pedido usando a SUM()função com a GROUP BYcláusula mostrada na consulta a seguir:

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
ORDER BY 
    orderTotal DESC;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Neste exemplo:

  • A GROUP BYcláusula divide os detalhes do pedido em grupos agrupados pelo número do pedido.
  • A SUM()função calcula o total de cada valor em cada pedido.

4) MySQL SUM() com exemplo de cláusula HAVING

Você pode usar a SUM()função na HAVINGcláusula para filtrar o grupo. Este exemplo ilustra como selecionar pedidos cujos valores sejam maiores que 60,000.

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
HAVING 
    SUM(quantityOrdered * priceEach) > 60000
ORDER BY 
    orderTotal;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

5) MySQL SUM() com exemplo NULL

A SUM()função retorna NULLse o conjunto de resultados estiver vazio. Às vezes, você pode querer que a SUM()função retorne zero em vez de NULL.

Neste caso, você pode usar a COALESCE()função. A COALESCEfunção aceita dois argumentos e retorna o segundo argumento se o primeiro argumento for NULL; caso contrário, ele retornará o primeiro argumento.

Veja a seguinte consulta:

SELECT 
    COALESCE(SUM(quantityOrdered * priceEach), 0) result
FROM
    orderdetails
WHERE
    productCode = 'S1_20';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

6) MySQL SUM() com exemplo de junção

Veja o seguinte orderse orderdetailsas tabelas:

Transação MySQL: pedidos e tabelas orderDetails

Você pode usar a SUM()função em uma cláusula SELECTwith JOINpara calcular a soma dos valores em uma tabela com base em uma condição especificada pelos valores em outra tabela.

Esta instrução utiliza a SUM()função para calcular os valores totais dos pedidos cancelados:

SELECT 
    SUM(quantityOrdered * priceEach) cancelled_amount
FROM
    orderdetails
INNER JOIN orders USING (orderNumber)
WHERE 
    status = 'Cancelled';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

7) Exemplo MySQL SUM IF

A instrução a seguir usa a SUM()função para calcular o número de itens vendidos para cada status de pedido:

SELECT 
    status, 
    SUM(quantityOrdered)
FROM
    orderdetails
        INNER JOIN
    orders USING (orderNumber)
GROUP BY status;
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se quiser girar linhas em colunas, você pode usar a SUM()função com CASEexpressão. É uma espécie de SUMIFlógica:

SELECT 
    SUM(CASE
        WHEN status = 'Shipped' THEN quantityOrdered
    END) qty_shipped,
    SUM(CASE
        WHEN status = 'Resolved' THEN quantityOrdered
    END) qty_resolved,
    SUM(CASE
        WHEN status = 'Cancelled' THEN quantityOrdered
    END) qty_cancelled,
    SUM(CASE
        WHEN status = 'On Hold' THEN quantityOrdered
    END) qty_on_hold,
    SUM(CASE
        WHEN status = 'Disputed' THEN quantityOrdered
    END) qty_on_disputed,
    SUM(CASE
        WHEN status = 'In Process' THEN quantityOrdered
    END) qty_in_process
FROM
    orderdetails
        INNER JOIN
    orders USING (orderNumber);
Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use a SUM()função MySQL para calcular a soma dos valores em um conjunto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *