Array
(
)

Produtos mais vendidos

Aspirante
   - 26 fev 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.


Aroldo Zanela
   - 26 fev 2006

Colega,

Pode usar uma consulta SQL com agrupamento. Exemplo:

#Código


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


Emerson
   - 27 fev 2006

só complementando a resposta do Aroldo Zanela:
#Código

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:
#Código
Select First 10
Produto, Sum(Qtde) as Total
from
Vendas
Group by
Produto
Order by
2 DESC



Aspirante
   - 15 mar 2006

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

#Código

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.


Paullsoftware
   - 15 mar 2006


Citação:
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:

#Código

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:
#Código
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:


Emerson
   - 15 mar 2006


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

#Código

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.
#Código
Select First 10 
CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL
from
HISTORICO
Group by
CODIGO, DESCRICAO
Order by
3 DESC



Gigatel
   - 15 mar 2006

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


Helio Nascimento
   - 16 mar 2006

emerson.en

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


Citação:
Select DISTINCT First 10
CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL
from
HISTORICO
Group by
CODIGO, DESCRICAO
Order by
3 DESC
Citação:


é uma sugestão. Tente.

Sds/Hélio



Aspirante
   - 17 mar 2006

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?