Ir para conteúdo

POWERED BY:

Arquivado

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

Everton.

[Resolvido] consulta.

Recommended Posts

961d43b5cc.png

 

 

Então pessoal sou estudante de um curso de banco de dados, estou com dúvida nesta consulta. Eu acredito que esteja certo, mas hora o post reclama que esta sem o 'group by' outra hora reclama da 'agregação', por favor analisem e vejam em que eu estou errando, obrigado.

 

Enun: Recupere o nome da cidade e nome do estado com a maior área territorial;

 

SELECT c.nm_cidade, u.nm_uf FROM tb_uf u INNER JOIN tb_cidades c USING (id_uf)
HAVING u.area = (SELECT MAX(u.area) FROM tb_uf) AND c.area = (SELECT MAX(c.area) FROM tb_cidades);

 

ps: Na modelagem das tabelas, não possui a coluna (area) na tabela tb_uf, mas em um outro enunciado anterior foi solicitado a inserção da mesma.

 

Obrigado pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT c.nm_cidade, u.nm_uf 
FROM tb_uf u INNER JOIN tb_cidades c USING (id_uf)
where c.area = (SELECT MAX(c.area) FROM tb_cidades);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o uso do where da errado brother porque a cláusula WHERE filtra as linhas antes de agrupar, logo os filtros de linhas referenciando campos não agregados devem ser feitos na cláusula WHERE e filtros de linhas referenciando campos agregados usa-se a cláusula HAVING.

 

Por via das dúvidas testei o código e o erro retornado foi exatamente esse:

 

ERRO:  agregação não é permitida na cláusula WHERE
LINE 3: where c.area = (SELECT MAX(c.area) FROM tb_cidades);

 

Valeu a ajuda mesmo assim, obrigado, agradeço quem me der uma luz. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Everton,

 

Não sei se você pode usar subselect, mas foi a forma rápida que fiz aqui... Pelo que entendi, você quer listar as cidades que pertencem ao estado com maior área... Ficaria então assim (só ajuste os campos que você quer mostrar)

 

select * from tb_cidades
join tb_uf on tb_cidades.id_uf = tb_uf.id_uf
where area_uf = (select max(area_uf) from tb_uf)

 

Dica: Reveja o padrão de nomes dos seus campos. No meu caso, prefiro usar um padrão em que um nome de campo nunca se repete em outra tabela (isso é pessoal!)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela ajuda gugaband, eu ja tinha resolvido isso... acabei esquecendo de postar. Referente ao uso do padrão, eu fiz uso dessas 'alias' exatamente por isso, pra me livrar das ambiguidades.

- Resolvi com subselect também, ficou assim:

 

SELECT c.nm_cidade, e.nm_uf
FROM tb_cidades c, tb_uf e
WHERE C.ID_UF = E.ID_UF
AND e.area = (select max (area) from tb_cidades c, tb_uf e WHERE C.ID_UF = E.ID_UF);

 

Abraços.

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.