[firebase-br] RES: Erro Cálculo da média

UNIBRAS - PROGRAMAÇÃO programacao em unibrasdistribuidora.com.br
Qui Ago 5 09:28:38 -03 2010


Presado,

Ao inves de usar um COUNT OU UM SUM de forma simples, caso esteja usando o
FIREBIRD 1.5 ou superior, para evitar possíveis problemas de cáuculos, você
pode usar coalesce(SUM (CAMPO), 0) para evitar problemas com campos "null" 

Isto vale para quaisquer tipos de dados.



José Aparecido
Sócio Diretor
Softmaxi Tecnologia em Software.
Telefone: 31 3786-6178  e 3789 6178.
www.softmaxi.com.br



-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Siro
Enviada em: quinta-feira, 5 de agosto de 2010 09:00
Para: Carlos H. Cantu; FireBase
Assunto: Re: [firebase-br] Erro Cálculo da média

  Realmente, esta correto, da forma que vc fez, eu também testei aqui.
Mas veja a que estou fazendo:

SELECT  count(i.valor_unitario),
AVG(I.VALOR_UNITARIO), sum(I.valor_unitario) FROM  ITENS_SAIDAS I INNER JOIN
SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE  I.ID_PRODUTO = 10232  and
S.DATA_SAIDA >=  '03/09/2010'
GROUP BY  I.VALOR_UNITARIO

retorna:
COUNT    AVG    SUM
1              3,8       3,8
3              4,8     14,4
8                5         40

Isto esta correto.. Agora

  o mesmo sql sem o agrupamento retorna:

SELECT  count(i.valor_unitario),
AVG(I.VALOR_UNITARIO), sum(I.valor_unitario) FROM  ITENS_SAIDAS I INNER JOIN
SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE  I.ID_PRODUTO = 10232  and
S.DATA_SAIDA >=  '03/09/2010'
/***********************************/
--GROUP BY  I.VALOR_UNITARIO
/***********************************/
retorna:
COUNT    AVG    SUM
12             4,85    58,2

Mostrando o valor minimo  e máximo  e retornou assim SELECT
count(i.valor_unitario), AVG(I.VALOR_UNITARIO), min(I.valor_unitario),
max(I.valor_unitario),
sum(I.valor_unitario)
FROM  ITENS_SAIDAS I
INNER JOIN SAIDAS_PRODUTOS S ON (S.ID = I.ID_SAIDA) WHERE  I.ID_PRODUTO =
10232  and S.DATA_SAIDA >=  '03/09/2010'

COUNT    AVG    MIN    MAX    SUM
12            4,85      3,8         5      58,2




Em 05/08/2010 07:51, Carlos H. Cantu escreveu:
> Fiz um teste aqui, criei uma tabela com um campo numeric 9,2, inseri 
> os 3 valores que vc usou e mandei calcular a AVG, e retornou 4.53
>
> Firebird 2.1.3
>
> []s
> Carlos H. Cantu
> www.FireBase.com.br - www.firebirdnews.org www.warmboot.com.br - 
> blog.firebase.com.br
>
> AB>  eu vou tratar de fazer essa prova assim que chegar ao escritorio 
> AB> se detectar  que é de facto um bug eu mesmo reporto o bug aos 
> AB> developers
>
> AB>  Andre
>
> AB>  2010/8/5 Siro<siro em protej.com.br>
>
>>>   Olá André.
>>>
>>> Sim, já fiz teste com a versão 2.1 e ocorre o mesmo problema.
>>> Gostaria que mais  alguém da lista também fizesse o teste  para 
>>> verificar, pois acho que já tentei de tudo para tentar descobrir se era
um provável
>>>   erro meu, mas não consegui detectar.
>>>
>>> Caso seja realmente um bug, peço para alguém informar, pois não 
>>> tenho "inglês"
>>> .
>>>
>>>
>>> Em 04/08/2010 22:39, André Barros escreveu:
>>>
>>>   De facto o select que fizeste está correcto y deveria retornar a 
>>> media
>>>> correcta pelo que deverá ser de facto algun bug no fire ja 
>>>> experimentaste com a versão anterior do 2.1.3
>>>>
>>>> Andre Barros
>>>>
>>>> 2010/8/4 Siro<siro em protej.com.br>
>>>>
>>>>    Bom dia.
>>>>> Pessoal,  será que estou ficando lélé ou há um bug do Firebird no 
>>>>> cálculo da média (AVG)?
>>>>>
>>>>> *Firebird 2.1.3.18185 , Delphi 2010, Ibexpert
>>>>>
>>>>> O sql abaixo me retorna os seguintes resultados:
>>>>>
>>>>> SELECT I.ID_PRODUTO, P.DESCRICAO_DETALHADA, I.VALOR_UNITARIO FROM  
>>>>> ITENS_SAIDAS I INNER JOIN SAIDAS_PRODUTOS S
>>>>>   ON (I.ID_SAIDA=S.ID) AND  (I.ID_EMPRESA=S.ID_EMPRESA)
>>>>>   INNER JOIN PRODUTOS P
>>>>>   ON (I.ID_PRODUTO=P.ID) AND  (I.ID_EMPRESA=P.ID_EMPRESA)
>>>>>
>>>>> WHERE  S.ID_EMPRESA = 1
>>>>>   AND S.STATUS = 'S'
>>>>>   AND I.ID_PRODUTO = 10232
>>>>>   and S.DATA_SAIDA>=  '03/09/2010'
>>>>>   GROUP BY I.ID_PRODUTO, P.DESCRICAO_DETALHADA, I.VALOR_UNITARIO
>>>>>
>>>>> /***************************************************/
>>>>> ID_PRODUTO    DESCRICAO_DETALHADA    VALOR_UNITARIO
>>>>> 10232    AVENTAL BAGUM AMARELO    5
>>>>> 10232    AVENTAL BAGUM AMARELO    4,8
>>>>> 10232    AVENTAL BAGUM AMARELO    3,8
>>>>>
>>>>>
>>>>>
>>>>> Quando quero a media utilizo o abaixo, que me retorna:
>>>>>
>>>>> SELECT I.ID_PRODUTO, P.DESCRICAO_DETALHADA,
>>>>> AVG(I.VALOR_UNITARIO)
>>>>>
>>>>> FROM  ITENS_SAIDAS I
>>>>> INNER JOIN SAIDAS_PRODUTOS S
>>>>>   ON (I.ID_SAIDA=S.ID) AND  (I.ID_EMPRESA=S.ID_EMPRESA)
>>>>>   INNER JOIN PRODUTOS P
>>>>>   ON (I.ID_PRODUTO=P.ID) AND  (I.ID_EMPRESA=P.ID_EMPRESA)
>>>>>
>>>>>   WHERE  S.ID_EMPRESA = 1
>>>>>   AND S.STATUS = 'S'
>>>>>   AND I.ID_PRODUTO = 10232
>>>>>   and S.DATA_SAIDA>=  '03/09/2010'
>>>>>   GROUP BY I.ID_PRODUTO, P.DESCRICAO_DETALHADA
>>>>>
>>>>> /***************************************************/
>>>>> ID_PRODUTO    DESCRICAO_DETALHADA    AVG
>>>>> 10232    AVENTAL BAGUM AMARELO    4,85
>>>>>
>>>>> Como o fire chegou a esta media de 4.85?? isto não é  um bug?
>>>>>
>>>>> Desde já agradeço
>>>>>
>>>>> ______________________________________________
>>>>> FireBase-BR (www.firebase.com.br) - Hospedado em 
>>>>> www.locador.com.br Para saber como gerenciar/excluir seu cadastro na
lista, use:
>>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>>
>>>>>   ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>>
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
> AB>  ______________________________________________
> AB>  FireBase-BR (www.firebase.com.br) - Hospedado em 
> AB> www.locador.com.br  Para saber como gerenciar/excluir seu cadastro na
lista, use:
> AB>  http://www.firebase.com.br/fb/artigo.php?id=1107
> AB>  Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br 
> Para saber como gerenciar/excluir seu cadastro na lista, use: 
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista