Select 10 produtos mais vendido - Firebird

Delphi

SELECT

Firebird

FireDAC

11/05/2022

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

Jefferson

Jefferson

Curtidas 0

Respostas

Jefferson

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
GOSTEI 0
Emerson Nascimento

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

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).
GOSTEI 0
POSTAR