Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024
Banco de Dados›Consultas 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
ano
mês
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, analise o comando SQL a seguir.
select avg(indice) from IPCA group by mes order by mes
A execução desse comando gera
Adoze linhas com uma coluna contendo números.
Bdoze linhas, contendo o valor null na primeira coluna e números na segunda.
Cum resultado vazio.
Duma linha com duas colunas, contendo o valor null e a média de todos os índices.
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 BYtransforma 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 AVGignora 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
1FROM IPCA
2GROUP BY mes (12 grupos)
3avg(indice) por grupo
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 semGROUP 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.