Questão nº 58
Questão de Tecnologia da Informação · FGV STN 2024 (nº 58)
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 apresentada, o comando SQL a seguir produz o índice acumulado a cada ano, que é obtido pela multiplicação acumulativa de um conjunto de termos da forma (1 + i/100), onde i é o valor do índice em cada um dos doze meses de cada ano.
select
Y.ano,
(1+ m1.indice/100) * (1+ m2.indice/100) *
(1+ m3.indice/100) * (1+ m4.indice/100) *
(1+ m5.indice/100) * (1+ m6.indice/100) *
(1+ m7.indice/100) * (1+ m8.indice/100) *
(1+ m9.indice/100) * (1+ m10.indice/100) *
(1+ m11.indice/100) * (1+ m12.indice/100) índice
from IPCA m1, IPCA m2, IPCA m3, IPCA m4,
IPCA m5, IPCA m6, IPCA m7, IPCA m8,
IPCA m9, IPCA m10, IPCA m11, IPCA m12,
. . . . . . . . Y
where
m12.mes =12 and m11.mes=11 and m10.mes=10
and m9.mes =9 and m8.mes =8 and m7.mes=7
and m6.mes =6 and m5.mes =5 and m4.mes=4
and m3.mes =3 and m2.mes =2 and m1.mes=1
and m12.ano = m11.ano and m11.ano = m10.ano
and m10.ano = m9.ano and m9.ano = m8.ano
and m8.ano = m7.ano and m7.ano = m6.ano
and m6.ano = m5.ano and m5.ano = m4.ano
and m4.ano = m3.ano and m3.ano = m2.ano
and m2.ano = m1.ano
and m1.ano = Y.ano
order by 1
Assinale o trecho que deve substituir o trecho pontilhado do comando acima, de modo que o cálculo e a apresentação sejam produzidos corretamente.
- A(select ano - 2021 as ano from IPCA)
- B(select ano from IPCA)
- C(select distinct ano from IPCA) (alternativa correta)
- D(select distinct ano, mes from IPCA)
- Eselect distinct ano from IPCA
Resposta comentada
Gabarito Alternativa C
Para calcular um valor para cada grupo único (como cada ano), é fundamental garantir que a fonte de dados para esses grupos forneça apenas os identificadores únicos. Isso evita cálculos redundantes ou resultados duplicados ao combinar com outras partes da consulta.
(A) Incorreta: Esta alternativa modifica os valores dos anos (`ano - 2021`), o que faria com que a condição de junção `m1.ano = Y.ano` não encontrasse correspondência com os anos originais da tabela `IPCA`, resultando em um conjunto de resultados vazio ou incorreto.
(B) Incorreta: Esta subconsulta (`select ano from IPCA`) retornaria cada ano tantas vezes quanto há meses para aquele ano na tabela `IPCA` (12 vezes para cada ano). Ao fazer a junção `m1.ano = Y.ano`, cada cálculo anual seria duplicado 12 vezes no resultado final, gerando linhas repetidas para cada ano. A armadilha aqui é que, embora pareça obter os anos, ela os obtém com redundância, levando a resultados incorretos.
(C) Correta: Esta subconsulta (`select distinct ano from IPCA`) retorna uma lista de todos os anos únicos presentes na tabela `IPCA`, cada um aparecendo apenas uma vez. Ao usar `Y.ano` na cláusula `SELECT` e na condição de junção `m1.ano = Y.ano`, garante-se que o índice acumulado seja calculado e apresentado corretamente para cada ano, sem duplicações.
(D) Incorreta: Esta alternativa (`select distinct ano, mes from IPCA`) retorna combinações únicas de ano e mês. A variável `Y` no comando SQL é utilizada apenas para obter o `ano` (`Y.ano`) e para a junção com `m1.ano`. Incluir o `mes` na subconsulta de `Y` é desnecessário e não se alinha com o propósito de `Y` de representar apenas os anos para agregação.
(E) Incorreta: Embora conceitualmente correta em termos de quais dados selecionar (`distinct ano`), esta alternativa está sintaticamente incorreta para ser usada como uma tabela na cláusula `FROM` na maioria dos SGBDs. Uma subconsulta na cláusula `FROM` deve ser envolvida por parênteses, como na alternativa (C). O comando `select distinct ano from IPCA` por si só é uma instrução `SELECT` completa, não um alias de tabela.
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.
