Array
(
)

10 filmes mais locados por cliente

Cristiane
   - 21 jul 2015

tenho uma tabela de locação e outra para seus itens, ou seja filmes.
gostaria de gerar um relatório que traga os 10 filmes mais locados por cliente
estou executando este select
#Código

select first 10
il.cod_produto, p.nome as produto, cl.nome as cliente, count(il.cod_produto) as nLocacao from itens_locacao il
inner join locacao l on l.cod_locacao = il.cod_locacao
inner join cliente cl on cl.cod_cliente  = l.cod_cliente
inner join produto p on p.cod_produto = il.cod_produto
group by il.cod_produto, p.nome, cl.nome
order by  4 desc

mas só traz os dez primeiros filmes mais locados da tabela de itens da locação, sem trazer os 10 filmes mais locados para cada cliente
o que fazer para resolver este sql?

Fernando C
   - 21 jul 2015

supondo que na tabela "locacoes" vc tenha os ids dos clientes e os ids dos filmes...
#Código

select count(*) from locacoes group by id_cliente having count(*) > 9

Cristiane
   - 28 jul 2015

não, na verdade esta em tabelas diferentes. o id do cliente está na tabela locação e o id do filme na tabela itens locação.
vou procurar me expressar melhor:

estou fazendo um relatório q, informando ou não o cliente desejado, traga os 10 filmes locados.
quando o cliente é informado, usando o first 10 ou count dá certo, pq fica assim no relatório:

Cliente - Cris
cod. filme descrição nº de locação
1 ela é o cara 4
2 fascinação 3
... -> mais 8 filmes

quando o cliente não é informado trago todos os clientes e os 10 filmes mais locados, ficando assim:

Cliente - Cris
cod. filme descrição nº de locação
1 ela é o cara 4
2 fascinação 3
... -> mais 8 filmes
Cliente - Antônio
cod. filme descrição nº de locação
1 ela é o cara 4
2 fascinação 3
... -> mais 8 filmes
Cliente - Flávia
cod. filme descrição nº de locação
1 ela é o cara 4
2 fascinação 3
... -> mais 8 filmes

e assim por diante
parece q com um select no inner ou left join pode dar certo, mas não consegui nada ainda.