Roger Tas 0 Denunciar post Postado Julho 2, 2010 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 2Como 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
Motta 645 Denunciar post Postado Julho 2, 2010 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
EuToComProblema! 1 Denunciar post Postado Julho 2, 2010 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
Roger Tas 0 Denunciar post Postado Julho 2, 2010 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 nomeBEle 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
Motta 645 Denunciar post Postado Julho 2, 2010 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