Soma de valores MySQL?

Suponhamos que eu tenha uma tabela com os seguintes valores

TABELA 1

id
1
2
3
4
5
6

e outra tabela com os seguintes valores

TABELA 2

id    valor
    1     10
    1      5
    2      4
    3      2
    4      1

o que eu precisava produzir é

id  soma
1    15
2     4
3     2
4     1
5     0
6     0

Ou seja, somar os valores da TABELA 2 organizados por id, fiz a seguinte consulta SQL:

SELECT
tabela1.id as id,
SUM(tabela2.valor) as soma
FROM
tabela1,tabela2
WHERE
tabela1.id = tabela2.id
GROUP BY tabela1.id

Porém o resultado é

id soma
1   15
2   4
3   2
4   1

Ou seja, 5 e 6 não aparecem. O que eu devo fazer, nesse caso?

Tente fazer conforme abaixo e veja se consegue o resultado que está esperando.

SELECT tabela1.id as id,
COALESCE(SUM(tabela2.valor),0) as soma
FROM  tabela1
LEFT JOIN tabela2 ON(tabela1.id = tabela2.id)    
GROUP BY tabela1.id;
2 curtidas

deu o mesmo resultado. não aparecem os ids 5, 6.

1 curtida

O que voc está fazendo com essa linha:

é equivalente a essa parte:

Isso é um INNER JOIN.

Com INNER JOIN, os valores precisam existir nas duas tabelas. Como os ids 5 e 6 nao existem na segunda tabela, eles nao aparecem no resultado.

O que você pode fazer, usando a forma que o @Jonathan_Medeiros postou, é usar um LEFT JOIN ao invés de um INNER JOIN.
Com o LEFT JOIN o resultado sempre aparecerá se ele existir na tabela a esquerda do JOIN, nesse caso tabela 1.

1 curtida

Por isso eu adoro esse forum.
Deu certo.
Muito obrigado a todos.

1 curtida

Não havia reparado na estrutura das tabelas dele, apenas havia me atentado na consulta, realmente com o INNER não vai funcionar, nesse caso o correto seria usar o LEFT, fiz a correção da resposta anterior.

1 curtida