Questão FC369480
ATENÇÃO: use a tabela relacional IPCA a seguir para responder à questão. Tabela IPCA indice ano mes 0,56 2023 12 0,28 2023 11 0,24 2023 10 . . . . . . . . . 0,2 2003 7 -0,15 2003 6
Linguagem SQL
FGV · 2024
ATENÇÃO: use a tabela relacional IPCA a seguir para responder à questão.
Tabela IPCA
| indice |
ano | mes |
| 0,56 |
2023 | 12 |
| 0,28 |
2023 | 11 |
| 0,24 |
2023 | 10 |
| . . . |
. . . | . . . |
| 0,2 |
2003 | 7 |
| -0,15 |
2003 | 6 |
| . . . |
. . . | . . . |
| 2,25 |
2003 | 1 |
| 2,1 | 2002 | 12 |
| 3,02 | 2002 | 11 |
| . . . |
. . . | . . . |
| 0,57 | 2001 | 1 |
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, assinale o comando SQL que produz, corretamente, para cada ano, o mês com o maior índice, ou meses, pois pode haver empate entre os índices de dois ou mais meses num mesmo ano.
- select *
from ipca
where exists
(select mes, ano from ipca x
where x.ano = ipca.ano
and x.indice > ipca.indice
group by ano)
order by ano, mês
- select ano, mes
from ipca
where not exists
(select mes, ano from ipca x
where x.ano = ipca.ano
and x.indice > ipca.indice)
order by ano, mês
- select ano, mes
from ipca
where not exists
(select mes, ano from ipca x
where x.ano >= ipca.ano
and x.indice < ipca.indice)
order by ano, mês
- select ano, mes
from ipca
where exists
(select * from ipca x
where x.ano = ipca.ano
and x.indice = ipca.indice
group by mes)
order by ano, mês
- select ano, mes
from ipca
where exists
(select mes, ano from ipca x
where x.ano = ipca.ano
or x.indice > ipca.indice)
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A consulta retorna, para cada ano, os meses em que o valor de indice é o maior daquele ano — mantendo todos os empates. Isso é feito por uma correlated subquery que compara linhas do mesmo ano.
O predicado NOT EXISTS elimina qualquer linha para a qual exista outra (na subconsulta) com o mesmo ano e com indice maior (condição x.indice > ipca.indice). Assim, permanecem apenas as linhas para as quais não há valor maior no mesmo ano, ou seja, os máximos.
Note que, por usar `>` (e não `>=`), casos de empate (meses diferentes com igual índice máximo) são todos retornados. Por fim, a cláusula order by ano, mês garante a ordenação por ano e mês na saída.
Conteúdo do catálogo FC Concursos · Atualizado em