Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Roger Tas

Somar campos diferentes

Recommended Posts

Salve pessoal,

 

Estou quebrando a cabeça novamente, me digam se eu modelei incorretamente ou se a conta é possível

 

A tabela é maior que isso, tem ID e tudo mais. Mas vou deixar exemplo basico até mesmo pra que eu não me perca

 

É uma tabela só:

 

---Teste---
id	nomeA	pontoA	nomeB	pontoB
1	Igor	2	Jorge	3
2	Jorge	1	Carlos	4
3	Carlos	1	Igor	3
4	Jorge	1	Igor	2
Como eu faço pra somar os pontos dos 3 jogadores sendo que em certos momentos eles estavam em posições diferentes?

 

Eu sei somar separadamente:

SELECT nomeA, sum(pontoA) as Total FROM `teste` WHERE 1 group by nomeA;
SELECT nomeB, sum(pontoB) as Total FROM `teste` WHERE 1 group by nomeB;

Vai me dar no nomeA Total

Igor 2

Jorge 2

Carlos 1

 

Vai me dar no nomeB Total

Jorge 3

Carlos 4

Igor 5

 

 

Como faço pra ele me dar o total pelo nome de todos independente se esta no nomeA com pontoA ou no nomeB com pontoB?

Igor 7

Jorge 5

Carlos 5

 

Se modelei errado, me avisem, to pensando em ir pro método de criar outra tabela onde tenha o mesmo ID e name pra colocar os pontos separados se for o caso

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria uma Function que retornaria os totais dos pontos de cada jogador.

 

Sql básico desta Function

 

SELECT SUM((CASE WHEN NOMEA = 'JOAO' THEN PONTOA ELSE 0 END) + (CASE WHEN NOMEB = 'JOAO' THEN PONTOB ELSE 0 END))

FROM TESTE

WHERE (NOMEA = 'JOAO' OR NOMEB = 'JOAO')

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nomeA, sum(pontoA + pontoB) as Total FROM `teste` WHERE nomeA = nomeB 
group by nomeA, nomeB;

não estou certo se funciona, mas tenta assim, se não der deixa só o group by nomeA, se ainda não der.... acho que poderias criar uma tabela JOGADORES com nome e id, aí você dah um group by jogador_id.

 

posta aí se o SQL acima funcionou.

 

flw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria uma Function que retornaria os totais dos pontos de cada jogador.

 

Sql básico desta Function

 

SELECT SUM((CASE WHEN NOMEA = 'JOAO' THEN PONTOA ELSE 0 END) + (CASE WHEN NOMEB = 'JOAO' THEN PONTOB ELSE 0 END))

FROM TESTE

WHERE (NOMEA = 'JOAO' OR NOMEB = 'JOAO')

 

Motta, não funcionaria. No caso, eu tenho que manter cada dia a pontuação separada também: ID 1 dia 1 jogou Igor e Jorge sendo que o mandante seria Igor e mais pra frente, Jorge seria o mandante e Igor o Visitante. O resultado da soma, seria como o primeiro SQL:

SELECT nomeA, sum(pontoA) as Total FROM `teste` WHERE 1 group by nomeA;
Ele Junta todas os dias que eles jogaram e ja retorna os nomes com seus devidos pontos.

E na hora de retornar os pontos, seria de todos, são uns 86 jogadores.

 

 

SELECT nomeA, sum(pontoA + pontoB) as Total FROM `teste` WHERE nomeA = nomeB 
group by nomeA, nomeB;

não estou certo se funciona, mas tenta assim, se não der deixa só o group by nomeA, se ainda não der.... acho que poderias criar uma tabela JOGADORES com nome e id, aí você dah um group by jogador_id.

 

posta aí se o SQL acima funcionou.

 

flw.

 

Ja tentei esse também, não funciona, volta com zero de resultado.

 

EuToComProblema!, Consegui algo similar com Union ALL, mas acho que não é isso.

SELECT nomeA, sum(pontoA) as Total FROM `teste` WHERE 1 group by nomeA UNION ALL
SELECT nomeB, sum(pontoB) as Total FROM `teste` WHERE 1 group by nomeB
Ele me retorna os pontos separados.

Igor 2
Igor 5
Jorge 2
Jorge 3
Carlos 1
Carlos 4

So faltava eles se juntarem e continuar a soma hehe

 

Muito Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

select nomea,sum(total) as total
from
(
SELECT nomeA, sum(pontoA) as Total FROM `teste` WHERE 1 group by nomeA 
UNION ALL
SELECT nomeB, sum(pontoB) as Total FROM `teste` WHERE 1 group by nomeB
)
group by nomea

Não funciona ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.