PHPower 0 Denunciar post Postado Setembro 5, 2011 Olá pessoal... a questão é a seguinte: Considerando duas tabelas e seus campos: orcamentos: valor, conta contas: id, conta, tipo No campo orcamentos.conta, eu gravo a id correspondente à contas.id. Gostaria de saber como faço uma consulta sql para obter a soma dos valores de orcamentos.valor, onde orcamentos.conta é igual a contas.id, e de modo que eu tenha os totais para cada valor diferente de orcamentos.conta. Será que fui claro? Obrigadão! EDIT: desculpem a caixa alta no nome. Tentei editar, mas não consegui. Compartilhar este post Link para o post Compartilhar em outros sites
rmlm 0 Denunciar post Postado Setembro 5, 2011 Se percebi bem, será qualquer coisa como isto: SELECT SUM(orcamentos.valor) AS 'Soma' FROM orcamentos, contas WHERE orcamentos.conta = contas.id GROUP BY(orcamentos.conta) Cumps :) Compartilhar este post Link para o post Compartilhar em outros sites
PHPower 0 Denunciar post Postado Setembro 6, 2011 Se percebi bem, será qualquer coisa como isto: SELECT SUM(orcamentos.valor) AS 'Soma' FROM orcamentos, contas WHERE orcamentos.conta = contas.id GROUP BY(orcamentos.conta) Cumps :) É isto mesmo, meu amigo d'além mar! Muito obrigado. Se não for um abuso, gostaria de sofisticar mais a consulta. Seria o seguinte: tabela orcamentos [valor] [conta] 133.00 1 244.00 2 355.00 3 tabela movimentos [valor] [conta] -100.00 1 -200.00 2 -300.00 3 tabela contas [id] [conta] [tipo] 1 carteira débito 2 banco débito 3 visa crédito Sendo assim, você já explicou como obter os totais da tabela 'orcamentos' para cada tipo de conta, referenciadas pelo id da tabela 'contas'. Gostaria agora de saber como: 1) Obter numa mesma query os totais, por tipo de conta, para a tabela 'orcamentos' e também para a tabela 'movimentos', de modo que eu possa operá-los num mesmo "loop" (while) do script php e; 2) Além disto, agrupar os totais por tipo de conta (débito ou crédito). Para a resposta 1), tentei algo com mysql_query("SELECT SUM(orcamentos.valor) AS 'soma', SUM(movimentos.valor) AS 'somov' FROM orcamentos, movimentos, contas WHERE orcamentos.centrocusto = contas.id AND movimentos.conta = contas.id (tanto AND como OR dão resultados inconsistentes) GROUP BY orcamentos.centrocusto, movimentos.conta") or die(mysql_error()); Muito grato! Compartilhar este post Link para o post Compartilhar em outros sites
rmlm 0 Denunciar post Postado Setembro 6, 2011 Bem ao que parece está a haver problemas na soma de valores negativos! Eu já criei umas tabelas de exemplo e estou a experimentar... aguarde alguns momentos :) Bem, não estou mesmo a perceber o que está acontecer... A minha sugestão é a seguinte: Fazes uma consulta para cada um dos totais e depois e só fazeres dois whiles lado-a-lado e ficas com a tabela correcta. Agora parece que há problemas em somar valores negativos! Eu fiz o seguinte para contornar o problema: Somei os valores todos como positivos e no fim passei para negativo. Isto só vai funcionar se os valores forem sempre negativos SELECT SUM(IF(m.valor < 0, m.valor * -1, m.valor * 1)) * -1 AS 'Soma de Movimentos' FROM movimentos m, contas c WHERE m.conta = c.id GROUP BY(c.id) Se juntar esta consulta com a outra os dados vão ser inconsistentes. Cumps :D Compartilhar este post Link para o post Compartilhar em outros sites
PHPower 0 Denunciar post Postado Setembro 8, 2011 Bem ao que parece está a haver problemas na soma de valores negativos! Eu já criei umas tabelas de exemplo e estou a experimentar... aguarde alguns momentos :) Bem, não estou mesmo a perceber o que está acontecer... A minha sugestão é a seguinte: Fazes uma consulta para cada um dos totais e depois e só fazeres dois whiles lado-a-lado e ficas com a tabela correcta. Agora parece que há problemas em somar valores negativos! Eu fiz o seguinte para contornar o problema: Somei os valores todos como positivos e no fim passei para negativo. Isto só vai funcionar se os valores forem sempre negativos SELECT SUM(IF(m.valor < 0, m.valor * -1, m.valor * 1)) * -1 AS 'Soma de Movimentos' FROM movimentos m, contas c WHERE m.conta = c.id GROUP BY(c.id) Se juntar esta consulta com a outra os dados vão ser inconsistentes. Cumps :D Então, que coisa... então o mysql é quem se perde mesmo na conta. Pensei que eu estava a escrever besteira na sintaxe. Pois então, tentarei isto, ou somar trazendo os valores um a um com while, em alguma variável. Meu amigo, muito obrigado pela ajuda! Abraço! Compartilhar este post Link para o post Compartilhar em outros sites