none
Fazer soma de valores duplicados RRS feed

  • Pergunta

  • tenho duas tabelas que estou dando join 
    Exemplo:
    Tabela 1
    id_t1 - nome_t1 - data de nascimento
    1 - Fulano - 21/02/1997
    2- ciclano - 15/12/1980

    Tabela 2
    id_t2 - nome_t2 - data da compra - valor da compra
    1 - Fulano - 15/11/2019 - 100
    1 - Fulano - 16/11/2019 - 100 
    1 - Fulano - 17/11/2019 - 100
    2 - Ciclano - 17/11/2019 - 100

    porém além do join eu preciso que some os valores da compra a partir de uma data (15/11/2019) e me liste o total da compra com a data mais recente

    Tabela Final (esperado)
    id - nome - data de nascimento - data da compra - valor da compra
    1 - Fulano - 21/02/1997 - 17/11/2019 - 300
    2 - Ciclano - 15/12/1980 - 17/11/2019 - 100

    eu tinha feito:

    SELECT id_t1, nome, data de nascimento, data da compra, sum(valor da compra) as SOMA
    FROM tabela 1
    full outer join tabela 2
    on id_t1 = id_t2
    WHERE  data >= 15/11/2019
    group by nome

    mas n ta funcionando

     


    • Editado 19507894 terça-feira, 19 de novembro de 2019 19:02
    terça-feira, 19 de novembro de 2019 18:27

Respostas

  • Boa tarde,

    Alguns pontos que são importantes destacar:

     - Quando se usa a cláusula GROUP BY, os campos que não tiverem uma função de agregação (SUM, COUNT, MAX) precisam estar na clausula group by, senão um erro é lançado. Nesse caso, as colunas que vão trazer a compra mais recente e a soma dos valores são funções de agregação, os outros campos estão no GROUP BY.

    - Acredito que não seja necessário usar o FULL JOIN a não ser que existam compras (tabela 2) que não tenham clientes (tabela 1). No código abaixo, alterei para LEFT JOIN para trazer os clientes mesmo se não tiverem compras.

    Fiz algumas alterações no seu código. Ainda é necessário colocar os nomes corretos dos campos, mas pode ser que ajude a resolver o problema:

    SELECT
    	id_t1,
    	nome,
    	dataDeNascimento,
    	MAX(dataDaCompra) as CompraMaisRecente,
    	SUM(valorDaCompra) as SOMA
    FROM tabela_1
    left outer join tabela_2 on id_t1 = id_t2
    WHERE dataDaCompra >= '20191115'
    	and (quantidade_negociada is not null OR numero_negocios is not null)
    group by id_t1, nome, dataDeNascimento
    Espero ter ajudado


    • Editado João Otávio A terça-feira, 19 de novembro de 2019 18:55
    • Marcado como Resposta 19507894 terça-feira, 19 de novembro de 2019 19:06
    terça-feira, 19 de novembro de 2019 18:55

Todas as Respostas

  • Boa tarde,

    Alguns pontos que são importantes destacar:

     - Quando se usa a cláusula GROUP BY, os campos que não tiverem uma função de agregação (SUM, COUNT, MAX) precisam estar na clausula group by, senão um erro é lançado. Nesse caso, as colunas que vão trazer a compra mais recente e a soma dos valores são funções de agregação, os outros campos estão no GROUP BY.

    - Acredito que não seja necessário usar o FULL JOIN a não ser que existam compras (tabela 2) que não tenham clientes (tabela 1). No código abaixo, alterei para LEFT JOIN para trazer os clientes mesmo se não tiverem compras.

    Fiz algumas alterações no seu código. Ainda é necessário colocar os nomes corretos dos campos, mas pode ser que ajude a resolver o problema:

    SELECT
    	id_t1,
    	nome,
    	dataDeNascimento,
    	MAX(dataDaCompra) as CompraMaisRecente,
    	SUM(valorDaCompra) as SOMA
    FROM tabela_1
    left outer join tabela_2 on id_t1 = id_t2
    WHERE dataDaCompra >= '20191115'
    	and (quantidade_negociada is not null OR numero_negocios is not null)
    group by id_t1, nome, dataDeNascimento
    Espero ter ajudado


    • Editado João Otávio A terça-feira, 19 de novembro de 2019 18:55
    • Marcado como Resposta 19507894 terça-feira, 19 de novembro de 2019 19:06
    terça-feira, 19 de novembro de 2019 18:55
  • Perfeito, João, muito obrigado. Estava com erro na clausula mesmo, consegui pegar a estrutura que você fez e colocar na minha consulta
    terça-feira, 19 de novembro de 2019 19:06