FC ConcursosFC Concursos

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.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

Continue aprendendo