Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2026

Banco de DadosConsultas e Comandos em SQL
Código
fc142186
Banca
FCC
Órgão
SEPLAG PE
Ano
2026
Cargo
GG POG ( )
Considere que no banco de dados relacional da SEPLAG, instalado e funcionando em condições ideais, foi criada a tabela metas_planejamento e alguns dados adicionais foram nela inseridos, conforme mostram os comandos SQL abaixo. CREATE TABLE metas_planejamento (     id INTEGER PRIMARY KEY,     descricao VARCHAR(30),     valor_previsto NUMERIC(10,2) );   INSERT INTO metas_planejamento (id, descricao, valor_previsto) VALUES (1, 'Digitalização de Documentos', 500000.00), (2, 'Sistema de Compras Integrado', 1200000.00), (3, 'Capacitação de Funcionários', 300000.00), (4, 'Implantação de BI', 900000.00), (5, 'Modernização de Infraestrutura', 1500000.00);   Um Gestor de planejamento executou um comando SQL que apresentou o seguinte resultado:   descricao                         valor_previsto - - - - - - - - - - - - - - - - - - - - - - - - -  Sistema de Compras Integrado      1200000.00 Implantação de BI                  900000.00 Modernização de Infraestrutura    1500000.00   O comando SQL executado pelo Gestor foi:
  1. ASELECT descricao, valor_previsto FROM metas_planejamento WHERE valor_previsto > (SELECT SUM(valor_previsto)/COUNT() FROM metas_planejamento);
  2. BSELECT descricao, valor_previsto FROM metas_planejamento WHERE valor_previsto > MEDIA(valor_previsto);
  3. CSELECT descricao, valor_previsto FROM metas_planejamento WHERE valor_previsto > (SELECT MEDIA(valor_previsto) FROM metas_planejamento);
  4. DSELECT descricao, valor_previsto FROM metas_planejamento WHERE valor_previsto > (SELECT AVG(valor_previsto) FROM metas_planejamento);
  5. ESELECT descricao, valor_previsto FROM metas_planejamento HAVING valor_previsto > (SELECT MAX(valor_previsto) FROM metas_planejamento);
Revelar gabarito e comentário

GabaritoD — SELECT descricao, valor_previsto FROM metas_planejamento WHERE valor_previsto > (SELECT AVG(valor_previsto) FROM metas_planejamento);

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: funções de agregação e subconsultas

Gabarito: letra D. O comando correto é aquele que compara cada valor_previsto com a média de todos os valores, usando a função de agregação AVG em uma subconsulta: WHERE valor_previsto > (SELECT AVG(valor_previsto) FROM metas_planejamento). As demais alternativas erram ao usar funções inexistentes (MEDIA, COUNT() sem argumento), sintaxe inválida (HAVING sem GROUP BY) ou lógica incorreta (comparar com o MAX).

A questão testa dois conceitos fundamentais de SQL: funções de agregação e subconsultas. Funções de agregação são funções que operam sobre um conjunto de linhas e retornam um único valor resumido. As principais são AVG (média), SUM (soma), COUNT (contagem), MAX (máximo) e MIN (mínimo). A função AVG é a única que calcula a média aritmética de uma coluna numérica — é exatamente o que precisamos para comparar cada valor com a média geral.

Uma subconsulta (ou consulta aninhada) é uma consulta SELECT dentro de outra consulta. No caso, a subconsulta (SELECT AVG(valor_previsto) FROM metas_planejamento) calcula a média de todos os valores da tabela, e essa média é usada como referência na cláusula WHERE da consulta externa. O WHERE filtra as linhas cujo valor_previsto seja maior que essa média.

Vamos calcular para confirmar: os valores são 500000, 1200000, 300000, 900000 e 1500000. A soma é 500000 + 1200000 + 300000 + 900000 + 1500000 = 4400000. A média é 4400000 / 5 = 880000. As linhas com valor maior que 880000 são: Sistema de Compras Integrado (1200000), Implantação de BI (900000) e Modernização de Infraestrutura (1500000) — exatamente o resultado apresentado no enunciado.

A pegadinha da banca está em duas frentes: (1) inventar funções que não existem no SQL padrão, como MEDIA e COUNT() sem argumento; (2) usar HAVING sem GROUP BY, o que é sintaticamente inválido. A função correta para média é AVG, e a comparação deve ser feita na cláusula WHERE, não no HAVING. Guarde essa distinção: WHERE filtra linhas individuais antes da agregação, enquanto HAVING filtra grupos após a agregação — e HAVING só faz sentido com GROUP BY.

  1. 1Calcular a média (AVG)
  2. 2Subconsulta retorna 880000
  3. 3Filtrar com WHERE > média
  4. 4Retorna 3 linhas corretas
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Usa COUNT() sem argumento, o que é inválido — a função COUNT exige um argumento, como COUNT(*) ou COUNT(coluna). Além disso, a lógica de comparar com SUM(valor_previsto)/COUNT() até calcularia a média, mas a sintaxe está errada. O correto seria COUNT(*) ou COUNT(valor_previsto), e mesmo assim a alternativa D é mais direta e correta.

Alternativa B — ❌ Incorreta

Usa MEDIA(valor_previsto) — essa função não existe no SQL padrão. A função correta para média é AVG. Além disso, a sintaxe está incompleta: falta a subconsulta (SELECT ...) para que o valor da média seja calculado e comparado.

Alternativa C — ❌ Incorreta

Usa MEDIA(valor_previsto) dentro da subconsulta — novamente, a função MEDIA não existe no SQL. A função correta é AVG. A estrutura da subconsulta está certa, mas a função errada invalida a alternativa.

Alternativa D — ✅ Correta ⟵ GABARITO

Usa a função de agregação correta AVG(valor_previsto) dentro de uma subconsulta, e compara cada valor_previsto com essa média na cláusula WHERE. A sintaxe está perfeita: WHERE valor_previsto > (SELECT AVG(valor_previsto) FROM metas_planejamento). Como calculado, a média é 880000, e o resultado retorna exatamente as três linhas apresentadas no enunciado.

Alternativa E — ❌ Incorreta

Usa HAVING sem GROUP BY, o que é sintaticamente inválido — HAVING só pode ser usado em consultas com agrupamento (GROUP BY). Além disso, compara com MAX(valor_previsto) (1500000), o que retornaria apenas as linhas com valor maior que 1500000 — nenhuma, pois o máximo é 1500000. A lógica está completamente errada.

Gabarito: letra D

Link permanente: /questoes/fc142186