Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cefalonx

Group By

Recommended Posts

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 !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente ...

 

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,
         (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO)
HAVING COUNT(LOC.ID_CLIENTE) >= 3
ORDER BY CLI.tx_nome_cliente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, tudo bem Motta,

 

Deu esse erro :

 

ORA-22818: expressões de subconsulta não permitidas aqui

22818. 00000 - "subquery expressions not allowed here"

*cause: an attempt was made to use a subquery expression where these are not supported.

*Action: Rewrite the statemnt without the subquery expression

Código de fornecedor 22818Erro na linha 44Coluna:13

Compartilhar este post


Link para o post
Compartilhar em outros sites

Põe o (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO) como uma tabela virtual.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim ?

SELECT 
      CLI.TX_NOME_CLIENTE AS "Cliente",
      G.TX_DESCR_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)
  JOIN (SELECT ID_GENERO, tx_descr_genero FROM GENERO) G
    ON (G.ID_GENERO = FI.ID_GENERO)
GROUP BY CLI.tx_nome_cliente,
         (SELECT tx_descr_genero FROM GENERO WHERE ID_GENERO = FI.ID_GENERO)
HAVING COUNT(LOC.ID_CLIENTE) >= 3
ORDER BY CLI.tx_nome_cliente

Coloquei assim e dá o mesmo erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.