Jump to content
Fivewin Brasil

AJUDA COM SQL PARA CALCULAR O SALDO DO PRODUTO


marcioe

Recommended Posts

Ola amigos um cliente me ligou reclamando que esta demorando demais para se vender um produto, (no caso especifico é CIMENTO) pois se trata de uma loja de materiais de construção.

Pois bem o sql que executo quando ele digita o código do produto é o abaixo.

Quando o item tem poucas vendas tipo assim 50.000 vezes por exemplo é rapidão, mas o problema é quando tem mais de 1.000.000 de vezes vendido, ai demora quase um minuto na rede para ele fazer essa ( select sum() )

o sql que executo e parecido com esse aqui

SELECT vda.CODVEN, SUM(vda.QTDVEN) AS TOTAL_VENDIDO, COUNT(*) AS Num_Pedido,
comp.COD_PRODUTO, SUM(comp.QTDE_COMPRADA) AS TOTAL_COMPRADO, COUNT(*) AS Num_comprado, 
SUM(comp.QTDE_COMPRADA)-SUM(vda.QTDVEN) AS SALDO
FROM vendas AS vda 
LEFT JOIN compras AS comp ON vda.CODVEN = comp.COD_PRODUTO 
where comp.COD_PRODUTO = 1
GROUP BY vda.CODVEN 

a imagem abaixo explica melhor, aqui fiz um geral, porem é em minha base de testes e fiz com todos os produtos

15hhavq.jpg

Teria uma forma de ser mais rápido ou algo diferente

os campos de código do produtos são Indexados

Link to comment
Share on other sites

Amigão, Evandro G. de Paula

Desculpa a minha Ignorância, mas eu não entendi o que voce passou

Pela Lógica seria assim

Ler a tabela de vendas filtrando pelo código

*copiar os dados para a Temporária

Ler a tabela de compras filtrando pelo código

*copiar os dados para a Temporária

Seria isso.

Link to comment
Share on other sites

Olá,

Seria algo assim:

create temporary table temp1 
SELECT vda.CODVEN, SUM(vda.QTDVEN) AS TOTAL_VENDIDO, COUNT(*) AS Num_Pedido
FROM vendas AS vda 
where vda.COD_PRODUTO = 1
GROUP BY vda.CODVEN;

create index temp1 on temp1 ( codven )

create temporary table temp2 
comp.COD_PRODUTO, SUM(comp.QTDE_COMPRADA) AS TOTAL_COMPRADO, COUNT(*) AS Num_comprado
from compras as comp
where comp.COD_PRODUTO = 1
GROUP BY vda.CODVEN;

create index temp2 on temp2 ( codven )

SELECT vda.CODVEN, vda.TOTAL_VENDIDO, vda.Num_Pedido,
comp.COD_PRODUTO, comp.TOTAL_COMPRADO, comp.Num_comprado, 
comp.QTDE_COMPRADA-vda.QTDVEN AS SALDO
FROM temp1 AS vda 
LEFT JOIN temp2 AS comp ON vda.CODVEN = comp.COD_PRODUTO 

Link to comment
Share on other sites

  • 4 weeks later...

Bom dia, da maneira como o seu projeto está, acredito ser dificil gerenciar base de dados grande. Eu uso uma tabela de movimento e uma tabela de saldos, esta ultima tem o codigo do produto, a data e o saldo. Os campos data e codigo do produto são chave primaria e possuem indices. Desta forma, qualquer pesquisa é instantânea independente da quantidade de registros.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...