AJuda SQL + ORACLE

18/12/2009

1

Bom dia Galera,

Seguinte, tenho que fazer um exercicio :
9.    Executar uma Query que realiza a leitura nas tabelas LOCACAO, CLIENTE, COPIA, FILME e GENERO, utilizando subquery do tipo IN-LINE VIEW, para mostrar os filmes de clientes que realizaram mais que 3 locações e mostrando o gênero do mesmo. Mostrar o resultado, seguindo os itens exemplificados abaixo:

Cliente                 Gênero      Filme                             Ano Produção
----------------------- ----------- --------------------------------- ------------
...

consegui trazer somente o nome dos clientes que tem mais de 3 locações, mas quando adiciono os outros campoas, dá erro dizendo que não é expressão group by... poderiam me ajudar...

código que somente traz o nome do cliente
SELECT 
      CLI.TX_NOME_CLIENTE AS "Cliente"
FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC
  JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI
    ON (cli.id_cliente = LOC.id_cliente)
  JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO
    ON (LOC.ID_COPIA = CO.ID_COPIA)
  JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI
    ON (FI.ID_FILME = CO.ID_FILME)
GROUP BY CLI.tx_nome_cliente
HAVING COUNT(LOC.ID_CLIENTE) >= 3
ORDER BY CLI.tx_nome_cliente


código qeu teoricamente era para trazer tudo:
SELECT 
      CLI.TX_NOME_CLIENTE AS "Cliente",
      (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) as "Gênero",
      FI.tx_titulo_filme AS "Filme", 
      FI.TX_ANO_FILME AS "Ano Produção"
FROM (SELECT ID_CLIENTE, ID_COPIA FROM LOCACAO) LOC
  JOIN (SELECT ID_CLIENTE, TX_NOME_CLIENTE FROM CLIENTE) CLI
    ON (cli.id_cliente = LOC.id_cliente)
  JOIN (SELECT ID_FILME, ID_COPIA FROM COPIA) CO
    ON (LOC.ID_COPIA = CO.ID_COPIA)
  JOIN (SELECT ID_FILME, ID_GENERO, TX_TITULO_FILME, TX_ANO_FILME FROM FILME) FI
    ON (FI.ID_FILME = CO.ID_FILME)
GROUP BY CLI.tx_nome_cliente
HAVING COUNT(LOC.ID_CLIENTE) >= 3
ORDER BY CLI.tx_nome_cliente


quem puder me ajudar agradeço !
Responder

Posts

16/05/2010

Danielle Lemos

Bruno,

Toda coluna referenciada no select tbm deve ser referenciada no group by a menos q seja uma função de agregação (sum, avg, count).

Ex: select id_cliente, id_produto, count(1)
from vendas
group by id_cliente, id_produto
having count(1) > 2
Responder