Produtos mais vendidos

26/02/2006

galera, tenho a tabela PRODUTOS, a outra chamada PEDIDO e por fim a VENDAS.

Quando o cara faz uma venda, pronto, já vendeu. Mas quando é feito o pedido, esta espera dar por vendida. O problema é:

Tenho que fazer uma relação dos produtos que mais vendem. Como fazer essa?

Obridado.


Aspirante

Respostas

26/02/2006

Aroldo Zanela

Colega,

Pode usar uma consulta SQL com agrupamento. Exemplo:

Select 
  Produto, Sum(Qtde) as Total 
from 
  Vendas
Group by 
  Produto


Dependendo do seus banco de dados, pode ordenar e limitar a consulta (rows, limit, first, top, etc).


Responder Citar

27/02/2006

Emerson

só complementando a resposta do Aroldo Zanela:
Select 
  Produto, Sum(Qtde) as Total 
from 
  Vendas 
Group by 
  Produto
Order by
  2 DESC

no caso eu ordenei pelo ´índice´ do campo (2o. campo da seleção), pois se trata de um campo agregado. conforme o banco de dados, essa sintaxe pode ser diferente.

dessa forma os produtos mais vendidos serão os primeiros registros, por conta da ordenação descrescente. a partir daí seria interessante limitar a consulta (rows, limit, first, top, etc, dependendo do banco de dados).
um exemplo com firebird: listar os 10 produtos mais vendidos:
Select First 10
  Produto, Sum(Qtde) as Total 
from 
  Vendas 
Group by 
  Produto
Order by
  2 DESC



Responder Citar

15/03/2006

Aspirante

então, eu fiz assim (bd Firebird, componentes InterBaseX):

Select First 10
  CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL
from 
  HISTORICO
Group by 
  CODIGO, DESCRICAO
Order by 
  2 DESC


mas não deu certo. quando o cara compra um produto ele pode especificar vários itens de um produto na QUANTIDADE. mas também, numa só compra ele pode comprar vários produtos e ir adicionando. assim, na tabela historico que é puxada depois pela tabela VENDAS para listar os produtos vendidos, fica várias vezes o mesmo produtos com quantidades diferentes.

como devo proceder? o código está certo para meu caso, ou devo pensar de outra maneira (que maneira?)? o que estou fazendo de errado?

obs.: já tentei de tudo, deixar o GROUP BY só com CODIGO E DESCRICAO, DESCRICAO E CODIGO, CODIGO DESCRICAO E TOTAL, TOTAL CODIGO DESCRICAO, etc... nada deu certo.

muito obrigado.


Responder Citar

15/03/2006

Paullsoftware

mas não deu certo. quando o cara compra um produto ele pode especificar vários itens de um produto na QUANTIDADE. mas também, numa só compra ele pode comprar vários produtos e ir adicionando. assim, na tabela historico que é puxada depois pela tabela VENDAS para listar os produtos vendidos, fica várias vezes o mesmo produtos com quantidades diferentes.


não tem por que da errado o código usado (GROUP BY), já é para evitar duplicidade dos itens...

eu tive um problema semelhante e tive que improvisar, eu precisava mostrar os Filmes mais locados e tentei de várias formas fazer isso através de consultas SQL e não obtive resultados...

o código que usei foi esse:

CREATE VIEW TOP_LOCADOS(
    TITULO,
    LOCACOES)
AS
SELECT NOME_FILME as Titulo,COUNT(*) as LOCACOES
FROM DETLOCACAO 
where detlocacao.codigo>0
GROUP BY NOME_FILME


depois pelo delphi fiz assim:
var
 I : Integer;
begin
 i := 0;
with DM_BANCO,TOP_LOCADOS do
 begin
  Close;
  Open;
  First;
  ListBox1.Items.Clear;
  for i := 0 to StrToInt(Edit1.Text) do
   begin
    ListBox1.Items.Add(FieldByName(´TITULO´).AsString + ´ - ´ +FieldByName(´LOCACOES´).AsString);
    Next;
   end;
  Close; 
 end;
end;


para melhor ajudarmos vc diga exatamente o que vc quer, e post as estruturas de suas tabelas dizendo quais campos você quer como resultado :wink:


Responder Citar

15/03/2006

Emerson

então, eu fiz assim (bd Firebird, componentes InterBaseX):
Select First 10
  CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL
from 
  HISTORICO
Group by 
  CODIGO, DESCRICAO
Order by 
  2 DESC
mas não deu certo. quando o cara compra um produto ele pode especificar vários itens de um produto na QUANTIDADE. mas também, numa só compra ele pode comprar vários produtos e ir adicionando. assim, na tabela historico que é puxada depois pela tabela VENDAS para listar os produtos vendidos, fica várias vezes o mesmo produtos com quantidades diferentes. como devo proceder? o código está certo para meu caso, ou devo pensar de outra maneira (que maneira?)? o que estou fazendo de errado? obs.: já tentei de tudo, deixar o GROUP BY só com CODIGO E DESCRICAO, DESCRICAO E CODIGO, CODIGO DESCRICAO E TOTAL, TOTAL CODIGO DESCRICAO, etc... nada deu certo. muito obrigado.


no seu caso, o ORDER BY é diferente. o índice do campo é 3.
Select First 10 
  CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL 
from 
  HISTORICO 
Group by 
  CODIGO, DESCRICAO 
Order by 
  3 DESC



Responder Citar

15/03/2006

Gigatel

sei lá posso está falando besteira...más num seria legal vc esta colocando em sua tabela de um campo que controlase isto ? toda vez que vender um produto acrecenta neste campo o valor referente a ao n de vendas ...vendeu 2 objetos, 2 objetos a mais neste campo assim uma pesquisa que qual produto vende mais seria rapinho...más isto implicaria numa mudança na tabela...


Responder Citar

16/03/2006

Helio Nascimento

emerson.en

Sera que incorporando ao código a cláusula DISTINCT não resolveria a ´vinda´ de registros repetidos do mesmo código?

Select DISTINCT First 10 CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL from HISTORICO Group by CODIGO, DESCRICAO Order by 3 DESC[quote] é uma sugestão. Tente. Sds/Hélio



Responder Citar

17/03/2006

Aspirante

nesse post explico certinho como funciona minhas tabelas:

http://forum.devmedia.com.br/viewtopic.php?t=74873&highlight=&sid=832cefb0ba115e6d84979bb40c165b0c

sabendo disso, qual processo é melhor pra mim?


Responder Citar