KUROL3 3 Denunciar post Postado Setembro 2, 2008 Ola estou executando o seguinte select SELECT MONTH( cf_data ) AS mes, sum( REPLACE( REPLACE( cf_preco, ".", "" ) , ",", "." ) ) AS total_em_produtos, max( REPLACE( REPLACE( cf_frete, ".", "" ) , ",", "." ) ) AS valor_frete_total, ( sum( REPLACE( REPLACE( cf_preco, ".", "" ) , ",", "." ) ) + max( cf_frete ) ) AS total_a_receber FROM carrinho_finalizado WHERE cf_status =3 OR cf_status =4 GROUP BY mes WITH ROLLUP LIMIT 0 , 30 pq o frete não é somado no total veja imagem abaixo.. Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Setembro 2, 2008 olha... parece que é por causa destes replaces que você está fazendo neste campo, e o MAX está retornando o campo como uma string. E este WITH ROLLUP se não me engano é específico para tipos numéricos. deve ser isto pois se reparar o alinhamento da coluna está à esquerda, o que geralmente acontece quando o tipo de campo é texto. tenta converter estes replaces para um tipo numérico antes de aplicar o max ou depois acho que tanto faz, p/ ver se melhora: SELECT MONTH( cf_data ) AS mes, sum( REPLACE( REPLACE( cf_preco, ".", "" ) , ",", "." ) ) AS total_em_produtos, max( CAST(REPLACE( REPLACE( cf_frete, ".", "" ) , ",", "." ) AS DECIMAL(13,2))) AS valor_frete_total, ( sum( REPLACE( REPLACE( cf_preco, ".", "" ) , ",", "." ) ) + max( cf_frete ) ) AS total_a_receber FROM carrinho_finalizado WHERE cf_status =3 OR cf_status =4 GROUP BY mes WITH ROLLUP LIMIT 0 , 30 Sobre conversão : http://dev.mysql.com/doc/refman/5.0/en/cas...l#function_cast. Mas só não entendi pq está trocando o ponto por vazio e depois a vírgula por ponto, ou seja, estes replaces aí. Até entendo no caso de estar utilizando isto para executar algo no banco através da programação (acho que nem seria no SQL) p/ evitar problema de deslocamento de campo em valor. Você quis aplicar algum tipo de formatação na saída? :mellow: Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Setembro 2, 2008 Não funcionow nao .. abaixo o printi screen com o resultado do seu select... e com a formatação da tabela Compartilhar este post Link para o post Compartilhar em outros sites
cassitos 2 Denunciar post Postado Setembro 2, 2008 pelo que entendi seguindo os exemplos no documento http://dev.mysql.com/doc/refman/5.0/en/gro...-modifiers.html, este modificador é específico para o somatório. no caso do uso somente com o MAX não vai funfar como esperado... mas mesmo assim, esta consulta mesmo se funcionasse com o MAX não estaria errada? tipo está somando o preço do pedido, mas está pegando o maior valor do frete. mas como está agrupando por mês não viria só um valor por mês? ex: no mês de maio tiveram uns 5 pedidos diferentes, e o maior frete destes pedidos foi um de 50, pelo visto viria só o 50, mas e o frete dos outros pedidos, não entram na soma? Compartilhar este post Link para o post Compartilhar em outros sites
KUROL3 3 Denunciar post Postado Setembro 2, 2008 A idéia seria sum(max(frete)) mas se usar dessa forma nao funciona.,..... cada grupo de pedido tem o mesmo valor do frete.... tipo id-------------frete-------------------pedido 1------------valorfrete 20-----------10 2------------valorfrete 20-----------10 3------------valorfrete 20-----------10 4------------valorfrete 27-----------14 5------------valorfrete 27-----------14 6------------valorfrete 15-----------19 7------------valorfrete 10-----------09 8------------valorfrete 10-----------09 9------------valorfrete 10-----------09 a idéia é essa..... Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Setembro 3, 2008 primeiro q a consulta original tem propensao a dar m***** pq o se você meche numa coluna decimal com uma funçao q nao seja matematica ele transforma aquilo em texto e pode dar erro em sum... logo o 'REPLACE' NUNCA poderia existir nessa consulta. Alem disso WITH ROLLUP seria algo como "aplique as funçoes de agrupamento (sum,max,count...) ignorando os agrupamentos na ultima linha" logo, se você pediu la em cim pra fazer MAX(frete) ele no final vai te dar MAX(frete) do grupo todo, ignorando o GROUP BY mes Compartilhar este post Link para o post Compartilhar em outros sites