Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

KUROL3

with rollup

Recommended Posts

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..

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Não funcionow nao .. abaixo o printi screen com o resultado do seu select... e com a formatação da tabela

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.