Produtos mais vendidos
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.
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
Curtidas 0
Respostas
Aroldo Zanela
26/02/2006
Colega,
Pode usar uma consulta SQL com agrupamento. Exemplo:
Dependendo do seus banco de dados, pode ordenar e limitar a consulta (rows, limit, first, top, etc).
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).
GOSTEI 0
Emerson Nascimento
26/02/2006
só complementando a resposta do Aroldo Zanela:
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 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
GOSTEI 0
Aspirante
26/02/2006
então, eu fiz assim (bd Firebird, componentes InterBaseX):
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.
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.
GOSTEI 0
Paullsoftware
26/02/2006
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:
GOSTEI 0
Emerson Nascimento
26/02/2006
então, eu fiz assim (bd Firebird, componentes InterBaseX):
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.
Select First 10 CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL from HISTORICO Group by CODIGO, DESCRICAO Order by 2 DESC
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
GOSTEI 0
Gigatel
26/02/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...
GOSTEI 0
Helio Nascimento
26/02/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?
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
CODIGO, DESCRICAO, Sum(QUANTIDADE) as TOTAL
from
HISTORICO
Group by
CODIGO, DESCRICAO
Order by
3 DESC
é uma sugestão. Tente.
Sds/Hélio
GOSTEI 0
Aspirante
26/02/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?
http://forum.devmedia.com.br/viewtopic.php?t=74873&highlight=&sid=832cefb0ba115e6d84979bb40c165b0c
sabendo disso, qual processo é melhor pra mim?
GOSTEI 0