Questão FC372816
Em um banco de dados PostgreSQL 13, funcionando em condições ideais, existe a tabela Cidades que possui os campos NomeCidade, Estado, Populacao e NumJuizes. Um Técnico foi solicita
Linguagem SQL
FCC · 2022
Em um banco de dados PostgreSQL 13, funcionando em condições ideais, existe a tabela Cidades que possui os campos NomeCidade, Estado, Populacao e NumJuizes. Um Técnico foi solicitado a apresentar todos os registros em que constem o NomeCidade cujo Estado seja ES e que tenha NumJuizes maior que 50. O comando SQL correto para isso é:
- SELECT * FROM Cidades WHERE Estado='ES' GROUP BY NomeCidade HAVING NumJuizes > 50;
- SELECT NomeCidade, Estado, NumJuizes FROM Cidades WHERE Estado='ES' AND HAVING NumJuizes > 50;
- SELECT NomeCidade, Estado, NumJuizes FROM Cidades WHERE Estado='ES' & NumJuizes > 50;
- SELECT * FROM Cidades WHERE Estado='ES' HAVING NumJuizes > 50;
- SELECT * FROM Cidades WHERE Estado='ES' GROUP BY (NomeCidade, Estado AND NumJuizes) HAVING NumJuizes > 50;
Mostrar resposta e comentário
Gabarito
A
Comentário do professor
A alternativa apresenta o comando: SELECT * FROM Cidades WHERE Estado='ES' GROUP BY NomeCidade HAVING NumJuizes > 50;
Em termos de intenção, WHERE filtra linhas (Estado='ES'), GROUP BY agrupa por NomeCidade e HAVING filtra grupos. Porém, em PostgreSQL 13 existe uma regra importante: todos os itens retornados no SELECT devem ser ou agregados ou constar do GROUP BY.
Aqui o uso de SELECT * com GROUP BY NomeCidade tenta retornar colunas (p.ex. Estado, Populacao, NumJuizes) que não estão no agrupamento nem são agregadas, gerando erro. Além disso, a condição em HAVING refere-se a uma coluna não agregada (NumJuizes), o que também é inválido sem agregação ou inclusão no GROUP BY.
Portanto, apesar de empregar corretamente nomes de cláusulas, essa consulta é incompatível com as restrições de agregação do PostgreSQL 13 e não produzirá o resultado desejado sem ajustes.
Conteúdo do catálogo FC Concursos · Atualizado em