Questão de Banco de Dados — Consultas e Comandos em SQL — FCC 2026
Banco de Dados›Consultas e Comandos em SQL
Código
fc142362
Banca
FCC
Órgão
MPE SE
Ano
2026
Cargo
Ana ( )
Atenção: A tabela Processos deve ser utilizada para resolver a questão seguinte.
A tabela Processos armazena informações sobre processos judiciais e possui os campos id, classe (trabalhista, penal etc), status (ativo, inativo, encerrado etc) e valor (custas associadas).
Uma analista precisa identificar, para cada classe da tabela Processos, apenas os processos ativos cujo valor seja superior à média de valores dos processos ativos da mesma classe. Para isso foi criada a consulta SQL abaixo:
SELECT p.classe, p.id, p.valor FROM Processos p WHERE p.status = 'Ativo' AND p.valor > I ;
Em condições ideais, para realizar o desejado pela analista, a lacuna I deve ser corretamente preenchida com:
ASELECT MAX(sub.valor) FROM Processos sub WHERE sub.classe = p.classe
BSELECT COUNT(valor) FROM Processos WHERE classe = p.classe AND status = 'Ativo'
CSELECT SUM(valor) FROM Processos sub WHERE sub.status = 'Ativo'
DSELECT AVG(p.valor) FROM Processos WHERE status = 'Ativo'
ESELECT AVG(sub.valor) FROM Processos sub WHERE sub.classe = p.classe AND sub.status = 'Ativo'
Revelar gabarito e comentário▾
GabaritoE — SELECT AVG(sub.valor) FROM Processos sub WHERE sub.classe = p.classe AND sub.status = 'Ativo'
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”.
Subconsultas correlacionadas e funções de agregação em SQL
Gabarito: letra E. Para identificar, em cada classe, os processos ativos cujo valor supera a média dos valores dos processos ativos da mesma classe, a lacuna deve ser preenchida com uma subconsulta correlacionada que calcule AVG(sub.valor) filtrando pela classe da linha externa (sub.classe = p.classe) e pelo status ativo (sub.status = 'Ativo') — exatamente o que a alternativa E apresenta.
O problema pede uma comparação entre o valor de cada processo e a média dos valores dos processos ativos da sua própria classe. Isso exige que, para cada linha avaliada pela consulta externa, a subconsulta calcule uma média diferente — a média da classe daquela linha específica. Essa é a definição de subconsulta correlacionada: a subconsulta referencia uma coluna da consulta externa (no caso, p.classe), fazendo com que ela seja reavaliada para cada linha da consulta principal.
Vamos decompor o que cada parte da consulta faz:
SELECT p.classe, p.id, p.valor FROM Processos p — seleciona os campos desejados da tabela Processos, com o alias p.
WHERE p.status = 'Ativo' — filtra apenas os processos ativos.
AND p.valor > I — a lacuna I deve ser uma expressão que retorne o valor médio dos processos ativos da mesma classe de p.
A subconsulta correta precisa:
Calcular a média (AVG) dos valores (sub.valor).
Considerar apenas os processos ativos (sub.status = 'Ativo').
Restringir à mesma classe da linha externa (sub.classe = p.classe).
A alternativa E cumpre exatamente esses três requisitos. As demais alternativas falham em pelo menos um deles: algumas não filtram por classe, outras não filtram por status, e outras usam funções de agregação incorretas (MAX, COUNT, SUM).
A pegadinha central desta questão é a correlação: sem o vínculo sub.classe = p.classe, a subconsulta calcularia uma média global (de todos os processos ativos), e não a média por classe. A banca explora exatamente essa confusão entre subconsulta correlacionada e subconsulta não correlacionada.
Guarde o critério decisivo: para comparar cada linha com uma agregação do seu grupo, a subconsulta deve ser correlacionada — referenciar a coluna da consulta externa. É nesse detalhe que as alternativas se dividem.
Subconsulta correlacionada: Definição (Referencia coluna da consulta externa, Reavaliada para cada linha); Requisitos da lacuna (AVG(sub.valor), sub.status = 'Ativo', sub.classe = p.classe); Erros comuns (MAX (maior valor, não média), COUNT (conta, não média), SUM (soma, não média), Sem correlação (média global))
Alternativa A — ❌ Incorreta
Usa MAX(sub.valor) em vez de AVG(sub.valor). A função MAX retorna o maior valor, não a média. Além disso, não filtra por status = 'Ativo' nem correlaciona com a classe da linha externa (sub.classe = p.classe), o que a tornaria uma subconsulta não correlacionada que retornaria o maior valor de todos os processos, independentemente da classe.
Alternativa B — ❌ Incorreta
Usa COUNT(valor), que conta o número de registros, não calcula a média. A consulta pede comparação com a média dos valores, não com a contagem. Além disso, a subconsulta não é correlacionada (não referencia p.classe), então contaria todos os processos ativos, não os da mesma classe.
Alternativa C — ❌ Incorreta
Usa SUM(valor), que soma os valores, não calcula a média. A subconsulta filtra por status = 'Ativo', mas não correlaciona com a classe da linha externa (sub.classe = p.classe), então somaria os valores de todos os processos ativos, não apenas os da mesma classe.
Alternativa D — ❌ Incorreta
Usa AVG(p.valor) — um erro duplo. Primeiro, referencia p.valor dentro da subconsulta, mas a subconsulta não tem acesso direto à linha externa sem correlação explícita (e mesmo com correlação, p.valor seria o valor da linha atual, não a média). Segundo, não filtra por status = 'Ativo' nem por classe, calculando a média de todos os processos, não apenas os ativos da mesma classe.
Alternativa E — ✅ Correta ⟵ GABARITO
A subconsulta SELECT AVG(sub.valor) FROM Processos sub WHERE sub.classe = p.classe AND sub.status = 'Ativo' é uma subconsulta correlacionada que, para cada linha p da consulta externa, calcula a média dos valores dos processos ativos da mesma classe de p. O vínculo sub.classe = p.classe garante a correlação, e sub.status = 'Ativo' garante que apenas processos ativos entram no cálculo. Isso atende exatamente ao requisito da analista.
PEGA ESSA DICA!
Para identificar uma subconsulta correlacionada, procure por uma referência a uma coluna da consulta externa dentro da subconsulta (ex.: sub.classe = p.classe). Se a subconsulta não referencia a consulta externa, ela é não correlacionada e calcula um valor único para todas as linhas — o que não serve para comparações por grupo.