deagle30 0 Denunciar post Postado Janeiro 12, 2011 Olá amigos da comunidade, este é meu primeiro post aqui, espero poder contribuir mais no futuro. Estou com uma seleção em MySQL que esta me dando uma dor de cabeça a algum tempo. Tenho duas tabelas, uma destana-se a cadastro de pontos gerando um saldo em diversas agencias e outra destina-se ao resgates destes pontos, que devem ser retirados de suas respectivas agencias. A estrutura de valores de pontuação das tabelas esta assim: 100 + 45 + 55 = 300 - 200 = 100 400 - 200 = 200 700 - 300 = 400 Utilizando SUM(DISTINCT) funciona, mas valores iguais não são acatados na soma. SELECT coop, coop2, SUM(DISTINCTrow(ponto02)) - SUM(DISTINCTrow(pont02)) as resgate, sum(ponto02) - sum(pont02) from `resgatepontos`, `resgatepontos2` where coop=coop2 group by coop Utilizando SUM simples ele me retorna valores errados. SELECT coop, sum(ponto02) - SUM(pont02) FROM `resgatepontos`, `resgatepontos2` where coop=coop2 group by coop Se alguem tiver alguma luz, fico agradecido. Pra dar uma forcinha to mandando as duas tabelas e a query do erro CREATE TABLE `resgatepontos` ( `cod` int(11) NOT NULL auto_increment, `coop` varchar(50) default NULL, `agencia` varchar(100) default NULL, `ponto01` float(10,2) default NULL, `ponto02` bigint(20) default NULL, `ponto03` float(10,2) default NULL, `ponto04` float(10,2) default NULL, `published` int(11) default '0', PRIMARY KEY (`cod`), UNIQUE KEY `cod` (`cod`) ) ENGINE=MyISAM AUTO_INCREMENT=16505 DEFAULT CHARSET=utf8; /* Data for the `resgatepontos` table (Records 1 - 4) */ INSERT INTO `resgatepontos` (`cod`, `coop`, `agencia`, `ponto01`, `ponto02`, `ponto03`, `ponto04`, `published`) VALUES (16496, '3001-Sul Litorâneo', '02-Iconha', 600, 300, 600, 200, 0), (16497, '3003-Sul', '11-Marataízes', 500, 400, 500, 300, 0), (16498, '3007-Leste Capixaba', '00-Rio Bananal', 400, 500, 400, 400, 0), (16504, '3007-Leste Capixaba', '08-Ibiraçú', 0, 200, 0, 0, 0); CREATE TABLE `resgatepontos2` ( `cod2` int(11) NOT NULL auto_increment, `coop2` varchar(50) default NULL, `agencia2` varchar(100) default NULL, `pont01` float(10,2) default NULL, `pont02` bigint(20) default NULL, `pont03` float(10,2) default NULL, `pont04` float(10,2) default NULL, `nome` varchar(100) default NULL, `published2` int(11) default '0', PRIMARY KEY (`cod2`), UNIQUE KEY `cod` (`cod2`) ) ENGINE=MyISAM AUTO_INCREMENT=16508 DEFAULT CHARSET=utf8; /* Data for the `resgatepontos2` table (Records 1 - 5) */ INSERT INTO `resgatepontos2` (`cod2`, `coop2`, `agencia2`, `pont01`, `pont02`, `pont03`, `pont04`, `nome`, `published2`) VALUES (16504, '3001-Sul Litorâneo', '05-Guarapari', 0, 55, 0, 0, '', 0), (16498, '3007-Leste Capixaba', '03-Colatina', 100, 300, 300, 300, 'Alfredo Dias', 0), (16499, '3003-Sul', '10-Guaçui', 150, 200, 200, 200, 'Teste', 0), (16500, '3001-Sul Litorâneo', '06-Anchieta', 200, 100, 100, 100, 'Marcelo', 0), (16505, '3001-Sul Litorâneo', '06-Anchieta', 0, 45, 0, 0, '', 0); /* SEGUE A QUERY DO ERRO */ SELECT coop, SUM(tab1.ponto02 - tab2.pont02) as total FROM `resgatepontos` as tab1, `resgatepontos2` as tab2 WHERE coop=coop2 GROUP BY coop Ninguem? Compartilhar este post Link para o post Compartilhar em outros sites
Prog 183 Denunciar post Postado Janeiro 12, 2011 SELECT coop, (sum(tab1.ponto02) - sum(tab2.pont02)) as total FROM `resgatepontos` as tab1, `resgatepontos2` as tab2 WHERE coop=coop2 GROUP BY coop Compartilhar este post Link para o post Compartilhar em outros sites
deagle30 0 Denunciar post Postado Janeiro 24, 2011 SELECT coop, (sum(tab1.ponto02) - sum(tab2.pont02)) as total FROM `resgatepontos` as tab1, `resgatepontos2` as tab2 WHERE coop=coop2 GROUP BY coop Caro prog, nesse caso toda a vez que tenho um registro na tabela Resgatepontos2 em que coop=coop2 ele multiplica primeiro o resultado para depois subtrair. Estou resolvendo por hora assim: SELECT *,(t.saldo - g.retirar) AS total FROM (SELECT coop, sum(tab1.ponto02) AS saldo from `resgatepontos` as tab1 where published='1' group by coop) AS T, (SELECT coop2, sum(tab2.pont02) AS retirar from `resgatepontos2` as tab2 where published='1' group by coop2 ) AS G where coop=coop2 Nesse caso me traz uma outra dúvida: é possível inibir no resultado a exibição de uma ou algumas colunas desse select? Compartilhar este post Link para o post Compartilhar em outros sites