0

Campo acumulador, utilizando a função SUM() - Mysql

criado por henrique em 18/10/2012 1:39pm
Boa tarde,

Preciso de uma ajuda em um script em SQL, tenho duas tabelas ('venda', 'produto') onde faço um select ... nele listo a descricao do produto, a contagem dos prd vendidos(sendo 1 prd para 1 venda), e o valor vendido de cada produto (qtd de prd * preço) ...

ficou assim o script:

SELECT descProduto, COUNT(vd.codProduto) as totPrd, (COUNT(vd.codProduto)*prd.preco) as ValorTotal
FROM `venda` as vd
JOIN produto as prd ON vd.codProduto = prd.codProduto
WHERE vd.status = '1'
GROUP BY vd.codProduto


Porém preciso extrair mais uma informação deste script, seria um acumulador do vlr vendido de cd produto ... tentei colocar 'SUM(ValorTotal)' mas retornou o erro:

#1054 - Unknown column 'ValorTotal' in 'field list'

e pelo que li na web, não é possivel utilizar um ALIAS na soma ... então tentei o seguinte:

SUM(COUNT(vd.codProduto)*prd.preco)


mas retornou este erro:

#1111 - Invalid use of group function

ja este erro eu nao consegui identificar o motivo ... :/

Podem me ajudar? please!!


OBS: Nesta linha estou filtrando somente os pedidos concluidos, no caso com status 1 .. nao sei se isso tem relação com o ultimo erro #1111

WHERE vd.status = '1'


Grato,

Henrique

Lista de Respostas:

0
18/10/2012 2:52pm
(~12 anos atrás)
Marcos Regis respondeu:
O que vc quer é um tanto incoerente.
Se COUNT(vd.codProduto)*prd.preco está lhe informando o valor correto, não há porque usar SUM() a menos que existam valores diferentes em prd.preco o que faria com que o COUNT()*valor esteja errado.

SE o que quer é o totalizador das linhas exibidas, você tem duas opções.
Usar a função ROLLUP ou ir acumulando na hora de exibir pelo PHP e exibir o valor acumulado.

O ROLLUP basta usar

SELECT .... GROUP BY coluna WITH ROLLUP

o totalizador basta usar uma variável.

0
18/10/2012 3:47pm
(~12 anos atrás)
henrique respondeu:
Obrigado Marcos,

viajei msm aqui ... rs

Fiz direto no php este acumulador q precisava.


Caso resolvido,
Grato

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)