Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas e Comandos em SQL
Código
fg165263
Banca
FGV
Órgão
STN
Ano
2024
Cargo
AFFC ( )

ATENÇÃO: use a tabela relacional IPCA a seguir para responder à próxima questão.

 

Tabela IPCA

indice

anomês

0,56

202312

0,28

202311

0,24

202310

. . .

. . .. . .

0,2

20037

-0,15

20036

. . .

. . .

. . .

2,25

20031

2,1

200212

3,02

200211

. . .

. . .

. . .

0,57

20011

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, analise o comando SQL a seguir.

 

select avg(indice)
from IPCA
group by mes
order by mes

 

A execução desse comando gera

  1. Adoze linhas com uma coluna contendo números.
  2. Bdoze linhas, contendo o valor null na primeira coluna e números na segunda.
  3. Cum resultado vazio.
  4. Duma linha com duas colunas, contendo o valor null e a média de todos os índices.
  5. Euma linha com uma coluna, contendo a média de todos os índices.
Revelar gabarito e comentário

GabaritoA — doze linhas com uma coluna contendo números.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL: GROUP BY e funções de agregação

Gabarito: letra A. O comando select avg(indice) from IPCA group by mes order by mes agrupa as linhas da tabela pelos 12 valores distintos da coluna mes (1 a 12) e calcula a média do indice para cada grupo, gerando 12 linhas, cada uma com uma única coluna contendo o valor numérico da média. A cláusula GROUP BY reduz o resultado a um número de linhas igual ao número de grupos formados, e a função AVG retorna um único valor por grupo — nunca uma linha com duas colunas, nem um resultado vazio, pois a tabela contém dados para todos os meses de 2001 a 2023.

A consulta apresentada é um exemplo clássico de agregação com agrupamento em SQL. Vamos decompor o que cada cláusula faz:

  • SELECT avg(indice): a função de agregação AVG (média) é aplicada sobre a coluna indice. Ela resume um conjunto de valores em um único valor numérico.

  • FROM IPCA: indica a tabela de origem dos dados.

  • GROUP BY mes: agrupa as linhas da tabela com base nos valores da coluna mes. Como a coluna mes contém os valores de 1 a 12 (janeiro a dezembro), a consulta formará exatamente 12 grupos — um para cada mês do ano.

  • ORDER BY mes: apenas ordena o resultado final pelos valores de mes, do menor (1) ao maior (12). Não altera o número de linhas nem o conteúdo das colunas.

O ponto central é entender que o GROUP BY transforma N linhas em G linhas, onde G é o número de grupos distintos formados pela coluna agrupada. Como a tabela IPCA contém dados de todos os meses de 2001 a 2023, existem 12 valores distintos de mes (1, 2, 3, ..., 12). Portanto, o resultado terá 12 linhas.

Cada linha do resultado terá uma única coluna, que é o valor da média calculada para aquele grupo. A coluna mes não aparece no SELECT, então ela não é exibida no resultado — ela serve apenas como critério de agrupamento. O resultado é, portanto, uma lista de 12 números, cada um representando a média do IPCA de um mês específico ao longo de todos os anos da série.

Para fixar: a função AVG ignora valores nulos (mas a questão afirma que a coluna indice não aceita nulos, então isso não interfere). E, como há dados para todos os meses, não há grupo vazio — o resultado nunca será vazio.

NÃO CAIA NESSA!

A banca tenta confundir o candidato ao sugerir que o resultado teria duas colunas (alternativas B e D). Isso só aconteceria se a coluna mes fosse incluída no SELECT (ex.: SELECT mes, avg(indice)). Como o SELECT traz apenas avg(indice), o resultado tem uma única coluna. Outra armadilha é a alternativa E, que sugere uma única linha com a média geral — isso ocorreria sem o GROUP BY, ou seja, se a consulta fosse apenas SELECT avg(indice) FROM IPCA. O GROUP BY é justamente o que quebra a média geral em 12 médias mensais.

Aspecto analisado

Comportamento na consulta

Resultado

Número de grupos formados

GROUP BY mes agrupa pelos 12 valores distintos (1 a 12)

12 linhas

Colunas no resultado

SELECT traz apenas avg(indice)

1 coluna

Tipo de dado na coluna

AVG retorna valor numérico (média por grupo)

Números

Efeito do ORDER BY mes

Ordena os grupos pelo mês (1 a 12)

Não altera linhas/colunas

Possibilidade de resultado vazio

Tabela tem dados de todos os meses (2001–2023)

Não ocorre

  1. 1FROM IPCA
  2. 2GROUP BY mes (12 grupos)
  3. 3avg(indice) por grupo
  4. 4ORDER BY mes
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A consulta agrupa as linhas pelos 12 valores distintos de mes e calcula a média do indice para cada grupo. O resultado é composto por 12 linhas, cada uma com uma única coluna contendo um número (a média). A cláusula ORDER BY mes apenas ordena essas 12 linhas. É exatamente o que a alternativa descreve.

Alternativa B — ❌ Incorreta

Afirma que o resultado teria duas colunas, sendo a primeira null. Isso está errado por dois motivos: (1) o SELECT traz apenas avg(indice), então há uma única coluna no resultado; (2) a função AVG nunca retorna null quando há valores válidos no grupo — e a questão garante que não há nulos na coluna indice. A ideia de uma coluna null provavelmente confunde com o comportamento de outras funções ou com a inclusão da coluna mes no SELECT (que não ocorre aqui).

Alternativa C — ❌ Incorreta

Um resultado vazio só ocorreria se a tabela estivesse sem linhas ou se o GROUP BY formasse grupos sem nenhum dado. Como a tabela contém dados de todos os meses de 2001 a 2023, existem 12 grupos com valores, e a consulta retorna 12 linhas. Não há condição WHERE que filtre linhas, então o resultado não pode ser vazio.

Alternativa D — ❌ Incorreta

Descreve uma linha com duas colunas, sendo uma null e a outra a média geral. Isso seria o resultado de uma consulta sem GROUP BY, como SELECT null, avg(indice) FROM IPCA. Com o GROUP BY mes, o resultado tem 12 linhas (uma por mês), não uma única linha. Além disso, a média geral não é calculada — são calculadas 12 médias, uma para cada grupo de mês.

Alternativa E — ❌ Incorreta

Descreve uma linha com uma coluna contendo a média de todos os índices. Isso seria o resultado de SELECT avg(indice) FROM IPCA, sem a cláusula GROUP BY. O GROUP BY mes quebra a média geral em 12 médias mensais, gerando 12 linhas, não uma. A alternativa ignora o efeito do agrupamento.

Gabarito: letra A

Link permanente: /questoes/fg165263