Select 10 produtos mais vendido - Firebird
Olá galera! um help!
Tenha uma tabela de venda e uma tabela foreign Key Venda Produto. Quero um select no qual o resultado me informe quais os 10 produtos mais comprados por um determinado cliente.
Tenho o seguinte select:
select first 10
a.id_cliente,
a.nome_cliente,
b.cod_prod,
b.descricao,
sum(b.qtd) as Qtd,
b.vlr_unitario,
sum(b.vlr_total) as Total
from
venda_orc_prod b
left join
venda_orc A on b.id_venda = a.id
where
a.id_cliente = '4'
group by b.cod_prod, b.qtd, b.vlr_unitario, b.vlr_total, b.descricao,
a.id_cliente, a.nome_cliente
order by b.qtd desc;
Só que o resultado não está listada em ordem como informado no script (Order By), é está repetindo determinados registros.
ID_CLIENTE NOME_CLIENTE COD_PROD DESCRICAO QTD VLR_UNITARIO TOTAL
4 LUCAS OLIVEIRA DA SILVA 3 BATERIA 150AP HONDA BIZ 3,00 159,00 477,00
4 LUCAS OLIVEIRA DA SILVA 5 BANCO CG125 HONDA 3,00 69,00 207,00
4 LUCAS OLIVEIRA DA SILVA 7 CUBO ROLAMENTO DIANTEIRO HONDA BIZ 3,00 121,00 363,00
4 LUCAS OLIVEIRA DA SILVA 1 ENGRENAGEM CABECOTE MOTOR HONDA 2,00 80,00 160,00
4 LUCAS OLIVEIRA DA SILVA 14 REALACAO BROS CG 150 2,00 114,00 228,00
4 LUCAS OLIVEIRA DA SILVA 3 BATERIA 150AP HONDA BIZ 1,00 159,00 159,00
4 LUCAS OLIVEIRA DA SILVA 4 RODA DIANTEIRA CG150 YAMAHA 1,00 138,00 138,00
4 LUCAS OLIVEIRA DA SILVA 5 BANCO CG125 HONDA 3,00 69,00 207,00
4 LUCAS OLIVEIRA DA SILVA 6 RELACAO COMPLETA TITAN 150 HONDA 2,00 95,00 190,00
4 LUCAS OLIVEIRA DA SILVA 7 CUBO ROLAMENTO DIANTEIRO HONDA BIZ 2,00 121,00 242,00
Tenha uma tabela de venda e uma tabela foreign Key Venda Produto. Quero um select no qual o resultado me informe quais os 10 produtos mais comprados por um determinado cliente.
Tenho o seguinte select:
select first 10
a.id_cliente,
a.nome_cliente,
b.cod_prod,
b.descricao,
sum(b.qtd) as Qtd,
b.vlr_unitario,
sum(b.vlr_total) as Total
from
venda_orc_prod b
left join
venda_orc A on b.id_venda = a.id
where
a.id_cliente = '4'
group by b.cod_prod, b.qtd, b.vlr_unitario, b.vlr_total, b.descricao,
a.id_cliente, a.nome_cliente
order by b.qtd desc;
Só que o resultado não está listada em ordem como informado no script (Order By), é está repetindo determinados registros.
ID_CLIENTE NOME_CLIENTE COD_PROD DESCRICAO QTD VLR_UNITARIO TOTAL
4 LUCAS OLIVEIRA DA SILVA 3 BATERIA 150AP HONDA BIZ 3,00 159,00 477,00
4 LUCAS OLIVEIRA DA SILVA 5 BANCO CG125 HONDA 3,00 69,00 207,00
4 LUCAS OLIVEIRA DA SILVA 7 CUBO ROLAMENTO DIANTEIRO HONDA BIZ 3,00 121,00 363,00
4 LUCAS OLIVEIRA DA SILVA 1 ENGRENAGEM CABECOTE MOTOR HONDA 2,00 80,00 160,00
4 LUCAS OLIVEIRA DA SILVA 14 REALACAO BROS CG 150 2,00 114,00 228,00
4 LUCAS OLIVEIRA DA SILVA 3 BATERIA 150AP HONDA BIZ 1,00 159,00 159,00
4 LUCAS OLIVEIRA DA SILVA 4 RODA DIANTEIRA CG150 YAMAHA 1,00 138,00 138,00
4 LUCAS OLIVEIRA DA SILVA 5 BANCO CG125 HONDA 3,00 69,00 207,00
4 LUCAS OLIVEIRA DA SILVA 6 RELACAO COMPLETA TITAN 150 HONDA 2,00 95,00 190,00
4 LUCAS OLIVEIRA DA SILVA 7 CUBO ROLAMENTO DIANTEIRO HONDA BIZ 2,00 121,00 242,00
Jefferson
Curtidas 0
Respostas
Jefferson
11/05/2022
Galera o resultado em .txt creio que não vai dar para entender muito bem, vou colocar um png aqui para facilitar.
https://1drv.ms/u/s!AskL4Hbn-91uiGiy3a9rlu2TmG1z?e=AMZVAe
https://1drv.ms/u/s!AskL4Hbn-91uiGiy3a9rlu2TmG1z?e=AMZVAe
GOSTEI 0
Emerson Nascimento
11/05/2022
tente assim:
select first 10 a.id_cliente, a.nome_cliente, b.cod_prod, b.descricao, sum(b.qtd) as qtd, avg(b.vlr_unitario) vlrunit, sum(b.vlr_total) as Total from venda_orc_prod b left join venda_orc a on a.id = b.id_venda where a.id_cliente = '4' group by a.id_cliente, a.nome_cliente, b.cod_prod, b.descricao order by sum(b.qtd) desc;
GOSTEI 0
Jefferson
11/05/2022
Olá amigo! Alguns registros ainda se repetem.
O group by ficou dessa forma:
group by
a.id,
b.cod_prod,
b.und_venda,
b.vlr_total,
b.descricao,
a.id_cliente,
a.nome_cliente
order by
sum(b.qtd) desc;
Caso eu coloque conforme o seu post tenho a seguinte mensagem de erro:
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
O group by ficou dessa forma:
group by
a.id,
b.cod_prod,
b.und_venda,
b.vlr_total,
b.descricao,
a.id_cliente,
a.nome_cliente
order by
sum(b.qtd) desc;
Caso eu coloque conforme o seu post tenho a seguinte mensagem de erro:
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
GOSTEI 0