Questão nº 56
Questão de Tecnologia da Informação · FGV STN 2024 (nº 56)
ATENÇÃO: use a tabela relacional IPCA a seguir para responder às quatro próximas questões.
Tabela IPCA
A instância da tabela contém os valores do índice IPCA para todos os meses dos anos de 2001 até 2023. Os valores pontilhados representam a continuidade mensal da série. Todas as colunas são numéricas, e não aceitam valores nulos.
No contexto da tabela IPCA, analise o script SQL de criação da view "v1".
create view v1 as
select ano, mes, salto from (
select y.ano, y.mes, y.indice anterior,
x.indice novo, y.indice - x.indice salto
from ipca x, ipca y
where
((x.ano = y.ano and y.mes = x.mes + 1)
Or
(y.ano = x.ano + 1 and y.mes = 1 and x.mes = 12))
) x
Admitindo que pode haver empates, assinale o comando SQL que emprega corretamente a view v1 para produzir o ano/mês que teve o maior salto positivo do índice em relação ao mês anterior, e o valor do salto.
- Aselect * from v1 where salto = max(salto)
- Bselect ano, mes, salto from v1 where salto = (select max(salto) from v1) (alternativa correta)
- Cselect ano, mes, salto from v1
- Dselect ano, mes, salto from v1 where salto = max(v1.salto)
- Eselect ano, mes, salto from v1 where salto > 0
Resposta comentada
Gabarito Alternativa B
Para encontrar o maior valor de uma coluna e as linhas correspondentes, é preciso primeiro descobrir qual é esse valor máximo (usando uma função agregada como MAX()) e depois usar esse valor para filtrar os dados, geralmente com uma subconsulta (uma consulta dentro de outra).
- (A) Incorreta: A função agregada
max(salto)não pode ser usada diretamente na cláusulaWHEREde uma consulta sem umGROUP BY. Isso resultaria em um erro sintático na maioria dos bancos de dados. - (B) Correta: Esta alternativa utiliza uma subconsulta
(select max(salto) from v1)para primeiro calcular o valor máximo dosaltoem toda a viewv1. Em seguida, a consulta externa filtra a viewv1para selecionar todas as linhas onde osaltoé igual a esse valor máximo encontrado pela subconsulta, atendendo ao requisito de encontrar o maior salto e permitindo empates. - (C) Incorreta: Esta consulta simplesmente retorna todas as colunas e linhas da view
v1, sem aplicar qualquer filtro para encontrar o maiorsalto. - (D) Incorreta: Assim como na alternativa A, tenta usar a função agregada
max(v1.salto)diretamente na cláusulaWHEREsem umGROUP BY, o que é um erro sintático. Armadilha: A banca tenta confundir ao usarv1.saltoem vez de apenassalto, mas o erro fundamental de usarMAX()noWHEREsem subconsulta ouGROUP BYpermanece. - (E) Incorreta: Esta consulta filtra apenas os registros onde o
saltoé positivo, mas não identifica o maiorsaltopositivo.
Fonte: FGV STN 2024 Auditor Federal de Finanças e Controle - Tecnologia da Informação (Transformação Digital) (Caderno Tipo 1). Reproduzida para fins de estudo.
