Ir para conteúdo

POWERED BY:

Arquivado

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

deagle30

Select com SUM resulta em resultado errados

Recommended Posts

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
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

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

×

Informação importante

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