Página 1 de 1
Mysql: possível erro em having
Enviado: 23 Jul 2020 01:31
por cjp
Pessoal, alguém poderia por favor me indicar se há algum erro neste comando:
Select CODIGO, compvenda as quantidade,SUM(COMPVENDA)*cotacao as SOMA from acoes WHERE status='E' AND conta='CL' AND vinculo=0 AND dtcotacao<=now() group by CODIGO having SOMA > 0 ORDER by dtcotacao
Digo isto porque, para o código PRLI11, por exemplo, está retornando a quantidade 100, mas, conforme imagem anexa, o correto seria retornar 200.
Podem me ajudar?
Mysql: possível erro em having
Enviado: 23 Jul 2020 02:30
por JoséQuintas
cjp escreveu:Pessoal, alguém poderia por favor me indicar se há algum erro neste comando:
comparar seleção diferente, é lógico que fica diferente
Código: Selecionar todos
Select CODIGO, compvenda as quantidade,SUM(COMPVENDA)*cotacao as SOMA
from acoes
WHERE status='E' AND conta='CL' AND vinculo=0 AND dtcotacao<=now()
group by CODIGO having SOMA > 0 ORDER by dtcotacao
Como está puxando compvenda e SUM(compvenda) ao mesmo tempo?
quer o individual e a soma agrupada ao mesmo tempo?
mas como individual se quer totalizado?
e pra conferir?
peça o mesmo do outro comando
Código: Selecionar todos
Select CODIGO, compvenda as quantidade
from acoes
WHERE codigo = 'PLRI11' and status='E' AND conta='CL' AND vinculo=0 AND dtcotacao<=now() and compvenda > 0
ou pelo menos confira o que é usado no outro select
Código: Selecionar todos
Select CODIGO, compvenda, dtcotacao, vinculo, conta
from acoes
WHERE codigo = 'PLRI11' and status='E' and compvenda > 0
Mysql: possível erro em having
Enviado: 23 Jul 2020 21:05
por cjp
Fiz os 3 testes, conforme imagens anexas.
A ideia é obter uma lista como no primeiro anexo, com as quantidades totais por cada código e a soma dos valores por cada código, sendo que a soma dos valores é a quantidade X o valor de cada código.
O problema é que, em alguns casos, como neste código PRLI11, a informação não está sendo fornecida corretamente, não sei porquê.
Mysql: possível erro em having
Enviado: 23 Jul 2020 23:14
por JoséQuintas
Princípio básico: Tentou fazer com papel e caneta?
Faça a conta com papel e caneta.
Senão... vai ficar postando imagens no fórum o tempo todo.
O que tá errado?
Impossível alguém responder
Faça com papel e caneta e vai ter a resposta.
Só imagino uma possibilidade: uma coisa que não está em nenhuma consulta, que vai descobrir assim que tentar fazer uma conta com papel e caneta, porque vai precisar dessa coisa.
Não vou dizer o que ACHO que é, porque vai postar mais e mais imagens....
Apenas faça a conta de um único, qualquer um, e vai saber.
Não temos como fazer isso, vai descobrir assim que fizer um.
Mysql: possível erro em having
Enviado: 24 Jul 2020 01:08
por Vlademiro
Se bem me recordo, o comando group by deve conter todas as colunas do select
Ex:
Código: Selecionar todos
select codigo, vendedor , sum(valor) from vendas_dia
group by codigo, vendedor
having sum(valor) > 200
Você não colocou a outra coluna (quantidade) no group by.
Ela, na verdade era para estar totalizada : sum(quantidade)
Mysql: possível erro em having
Enviado: 24 Jul 2020 11:02
por JoséQuintas
Sinceramente.... não entendo o CJP
Parece ser difícil usar a cabeça....
Postar imagem tá craque...
Vamos lá....
usando papel e caneta....
quantidade x valor tá errado.
quanto é a quantidade?
quanto é o valor?
Olhando todos os posts e imagens.... em nenhum deles tem valor.
Como é que ele conferiu e chegou a conclusão que estava errado? não faço a menor idéia...
Como é que ele quer que a gente responda? não faço a menor idéia.
Mysql: possível erro em having
Enviado: 24 Jul 2020 17:07
por JoséQuintas
Ao CJP:
A intenção é apenas chamar a atenção que você pode resolver muitos problemas sozinho, usando o princípio bem básico.
Quando sugeri usar papel e caneta...
SUM( compvenda ) * cotacao
Se cotacao for zero.... o resultado vai ser zero
Usando papel e caneta, obrigatoriamente vai ver que precisa olhar o valor de cotacao pra fazer essa conta.
Muito provavelmente o problema está aí, e não dá pra ver em nada do que foi postado
Palavras de um conhecido: Se funciona no papel, funciona no computador
Achei essas palavras muito interessantes, e não se trata apenas dessa conta.
Exemplo: um controle de estoque numa empresa não funciona. Funciona no papel? os usuários estão preenchendo papel sobre o que foi retirado do estoque? se eles não fazem isso no papel, vão fazer menos ainda sendo pelo computador, e não vai ter aplicativo que resolva isso.
Então a pergunta: qual o resultado disso fazendo no papel?
Assim que tiver conferido, SE NÃO resolver sozinho, poste toda informação que foi usada pra fazer as contas.
Mysql: possível erro em having
Enviado: 25 Jul 2020 22:51
por cjp
O campo cotacao não é zero. Verifiquei e estou postando foto para comprovar.
Mas mesmo que fosse, não seria o caso aqui, pois a soma que está errada é apenas da soma do campo compvenda, que deveria retornar 200 e está retornando 100.
Vou tentar explicar melhor.
A lista que pretendo é a do segundo anexo da minha mensagem anterior (não vou postar de novo para não lotar o site de anexos). Nessa lista, para o código PRLI11, está resultando quantidade=100, quando deveria resultar 200 (estou desprezando o último registro, pois ele é de 23/7/2020, data posterior à minha primeira postagem aqui; mas se considerar esse registro, deveria resultado 400, e continua resultando 100). Lembrando que quantidade é pra ser a soma apenas do campo compvenda.
As demais consultas que postei foram apenas para demonstrar como estão os registros na tabela.
Também vou postar agora a conta feita à mão, que resulta também no total de 200 (também desprezando o último registro).
Em suma, é evidente que tem algum erro no meu select. Não estou dizendo que o erro é do computador, ou do MySQL. É claro que o erro deve ser do select que eu fiz. E é por isso que estou pedindo ajuda, pois não sei o que estou fazendo errado.
Mysql: possível erro em having
Enviado: 26 Jul 2020 00:03
por JoséQuintas
o erro tá no pensamento kkkkk
tá pedindo o valor e querendo que saia o total
Pra nós, se tá pedindo o valor, sair o valor tá correto, já que só pede pra somar na outra coluna.
Nota: como a data atual aumentou, o resultado passou a ser 400
Mysql: possível erro em having
Enviado: 26 Jul 2020 00:13
por JoséQuintas
Só comentário:
O que dificultou a resposta é que estávamos olhando o cálculo, já que a questão foi sobre o cálculo.
Quando mostrou no papel e caneta, facilitou entender do que estava falando.
Mysql: possível erro em having
Enviado: 26 Jul 2020 00:28
por JoséQuintas
Confirme o outro cálculo, é possível que tenha feito errado também, pelo mesmo motivo.
Mysql: possível erro em having
Enviado: 26 Jul 2020 01:02
por cjp
Vc está certo. Deu certo agora. Obrigado.
Mysql: possível erro em having
Enviado: 26 Jul 2020 02:26
por JoséQuintas
Por muita coincidência estava mexendo num agora, com group e having.
Código: Selecionar todos
WITH OBJECT cnSQL
cSQLGroup := "LPAD( YEAR( LFDATLAN ), 4, '0' ), LPAD( MONTH( LFDATLAN ), 2, '0' )"
IF nOpcTotais == 1
cSQLGroup += ", LPAD( Day( LFDATLAN ), 2, '0' )"
ENDIF
cSQLGroup := "CONCAT_WS( '-', " + cSQLGroup + " )"
:cSQL := "SELECT LFTIPLAN, " + cSQLGroup + " AS DATA, " + ;
" SUM( LFVALCON ) AS VALCON, SUM( IF( LFICMVAL = 0, 0, LFICMBAS ) ) AS ICMBAS," + ;
" SUM( LFICMVAL ) AS ICMVAL, SUM( LFICMOUT ) AS ICMOUT," + ;
" SUM( IF( LFVALCON - LFICMBAS - LFICMOUT > 0, LFVALCON - LFICMBAS - LFICMOUT, 0 ) ) AS ICMISE," + ;
" SUM( LFIPIVAL ) AS IPIVAL, SUM( IF( LFIPIVAL > 0, LFIPIBAS, 0 ) ) AS IPIBAS," + ;
" SUM( IF( LFVALCON - LFIPIBAS - LFIPIOUT - LFIPIVAL > 0, LFVALCON - LFIPIBAS - LFIPIOUT - LFIPIVAL, 0 ) ) AS IPIISE," + ;
" SUM( LFIPIOUT ) AS IPIOUT" + ;
" FROM JPFISCAL" + ;
" WHERE LFTIPLAN IN ( '1', '2' )"
IF nOpcData == 2
:cSQL += " AND LFDATLAN BETWEEN CAST( " + DateSQL( dDataInicial ) + " AS DATE )" + ;
" AND CAST( " + DateSQL( dDataFinal ) + " AS DATE )"
ENDIF
IF nOpcGrf <> 1
:cSQL += " AND LFGRF " + iif( nOpcGrf == 2, "=", "<>" ) + " 'S'"
ENDIF
:cSQL += " GROUP BY LFTIPLAN, " + cSQLGroup + ;
" HAVING VALCON > 0" + ;
" ORDER BY LFTIPLAN DESC, DATA"
:Execute()
Esta parte é pra facilitar a construção do comando, porque se repete, é o total pela data, por dia ou por mês
Código: Selecionar todos
cSQLGroup := "LPAD( YEAR( LFDATLAN ), 4, '0' ), LPAD( MONTH( LFDATLAN ), 2, '0' )"
IF nOpcTotais == 1
cSQLGroup += ", LPAD( Day( LFDATLAN ), 2, '0' )"
ENDIF
cSQLGroup := "CONCAT_WS( '-', " + cSQLGroup + " )"