Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

security

Calculos em tabela c/ dados agrupados

Mensagens Recomendadas

security

Boa tarde,

eu tenho um problema que não sei muito bem como resolve-lo. o problema é o seguinte:

Tenho uma tabela que contem os montantes ganhos e recebidos, com a seguinte sql para agrupa-los.

SELECT SUM(valor) AS total, tb_operacao.descricao AS desc
FROM tb_mov, tb_operacao
WHERE tb_operacao.ID_op=tb_mov.ID_op AND tb_mov.ID_user=".$SSIDuser." and ID_encargo=".$_GET['enc_id']."
GROUP BY tb_mov.ID_op ORDER BY tb_operacao.descricao ASC";

Isto vai simular um resultado semelhante ao reproduzido abaixo.

Ganho - 1000

Recebido - 500

E agora quero saber qual o montante em divida. ou seja, tenho que fazer algo como:

Valor em divida = Ganho - Recebido

Como é que posso fazer este calculo na sql acima listada???

Cumps,

security


"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

antes do mais, tenho a certeza que se correres o sql que apresentaste, isso vai dar erro :

SELECT SUM(valor) AS total, tb_operacao.descricao AS DESC
/*                                                    |
                                            palavra reservada !!!  */

Editado por HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
security

Por acaso funciona na perfeição e melhor só com as restantes alterações que quero fazer. ;)

caso ainda nao tenhas reparado a sintaxe está correta. A palavra reservada esta colocada no final da sql na sequencia correta, ou seja a query de pesquisa (SELECT campo1, campo2, campo3, ..., FROM tabela) ORDER BY, campo1, ASC ou DESC consoante queiras que apareça, ascendente ou descendente.

Editado por security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Por acaso funciona na perfeição e melhor só com as restantes alterações que quero fazer. ;)

caso ainda nao tenhas reparado a sintaxe está correta. A palavra reservada esta colocada no final da sql na sequencia correta, ou seja a query de pesquisa (SELECT campo1, campo2, campo3, ..., FROM tabela) ORDER BY, campo1, ASC ou DESC consoante queiras que apareça, ascendente ou descendente.

achas que eu não sei ler o que escreveste ??

a palavra reservada está no meio do teu SQL e não no fim.

ou "caso ainda não tenhas reparado" eu meti o teu próprio código no post que fiz onde demonstra exactamente isso ?

SELECT SUM(valor) AS total, tb_operacao.descricao AS desc /* <--- isto parecete com o fim da query ????? */
FROM tb_mov, tb_operacao
WHERE tb_operacao.ID_op=tb_mov.ID_op AND tb_mov.ID_user=".$SSIDuser." and ID_encargo=".$_GET['enc_id']."
GROUP BY tb_mov.ID_op ORDER BY tb_operacao.descricao ASC";


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
security

Exato. isso esta bem. se reparares antes eu tenho a mesma coisa. estou apenas a atribuir nomes as tabelas.

Editado por security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rezanov

O que ele quis dizer é que tanto DESC como ASC são reservadas e não podem/devem ser usadas para atribuir nomes de colunas.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

existe uma maneira de permitir o uso dessas palavras reservadas como nomes, mas claramente não estás a usar :

$sql = "SELECT SUM(`valor`) AS `total`, `tb_operacao`.`descricao` AS `DESC`
         FROM `tb_mov`, `tb_operacao`
        WHERE `tb_operacao`.`ID_op` = `tb_mov`.`ID_op`
          AND `tb_mov`.`ID_user` = '".$SSIDuser."'
          AND `ID_encargo` = '".$_GET['enc_id']."'
     GROUP BY `tb_mov`.`ID_op`
     ORDER BY `tb_operacao`.`descricao` ASC";


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
security

sim e no phpMyAdmin aparece assim mais se nao colocar as plicas funciona na mesma e sem problemas.

P.S.: O "desc" que utilizo quase no inicio da quwery uso-o como abreviatura de descrição

Editado por security

"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Nao uses palavras reservadas como nomes/abreviatura de campos, podes ter problemas futuros...


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
security

Mas voltando à questão principal!

alguem me sabe explicar como faço o calcu~lo ou como faço?

ou em vez de fazer o calculo na sql será melhor criar um array e efetuar os calculos a partir desse array???


"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

tens um sql que apresenta uma soma de valores. no entanto não dizes se essa soma de valores são os "ganhos" ou são os "recebidos"

sendo um ou outro, a maneira de saber a informação restante não foi apresentada.

conclusão : só com a informação apresentada é impossível te responder


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
security

Mas é esta sql que me diz se os valores são ganhos ou recebidos, ou pagamentos, ou outra coisa qq. depois dependendo da descrição do valor apresentado em cada linha é que será efectuado o calculo. Isto é, neste momento os valores que tenho são apenas de valores ganhos e recebidos, mas pode ter outro tipo de valores.

Neste caso especifico é possível efectuar o calculo ou crio uma sql dentro de outra de forma a criar arrays diferentes para poder efetuar os calculos???


"Innovation distinguishes between a leader and a follower." Steve jobs.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Podes fazer algo assim:

DECLARE @GanhoOpID int = 1;
DECLARE @RecebidoOpID int = 3;
SELECT SUM(CASE WHEN ID_op=@GanhoOpID THEN Valor ELSE 0 END ) as ganho, SUM(CASE WHEN ID_op= @RecebidoOpID THEN Valor ELSE 0 END ) as recebido
FROM tb_mov 

Se substituires o GanhoOpID e o RecebidoOpID pelos os valores correctos, consegues fazer... mas nao e' a melhor solucao, eu repensava a estrutura da base de dados... ou pelo o menos ter uma tabela auxiliar para saber qual e' que foi pago ou nao...


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.