Clipper On Line • Ver Tópico - Mysql: possível erro em having

Mysql: possível erro em having

Discussão sobre SQL

Moderador: Moderadores

 

Mysql: possível erro em having

Mensagempor cjp » 23 Jul 2020 01:31

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?
Anexos
tela2.png
tela2.png (8.32 KiB) Visualizado 1455 vezes
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 23 Jul 2020 02:30

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

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

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

Select CODIGO, compvenda, dtcotacao, vinculo, conta
from acoes
WHERE codigo = 'PLRI11' and status='E' and compvenda > 0
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor cjp » 23 Jul 2020 21:05

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ê.
Anexos
tela3.png
tela2.png
tela2.png (10.61 KiB) Visualizado 1428 vezes
tela1.png
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 23 Jul 2020 23:14

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor Vlademiro » 24 Jul 2020 01:08

Se bem me recordo, o comando group by deve conter todas as colunas do select

Ex:
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)
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 24 Jul 2020 11:02

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 24 Jul 2020 17:07

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor cjp » 25 Jul 2020 22:51

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.
Anexos
tela.png
img20200725_22372914.jpg
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 26 Jul 2020 00:03

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

conta2.png


conta.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 26 Jul 2020 00:13

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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 26 Jul 2020 00:28

Confirme o outro cálculo, é possível que tenha feito errado também, pelo mesmo motivo.

conta.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: possível erro em having

Mensagempor cjp » 26 Jul 2020 01:02

Vc está certo. Deu certo agora. Obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Mysql: possível erro em having

Mensagempor JoséQuintas » 26 Jul 2020 02:26

Por muita coincidência estava mexendo num agora, com group e having.

   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

      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 + " )"
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 6 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro