Pular para o conteúdo principal

Questão de Banco de Dados — Geral — FGV 2026

Banco de DadosGeral
Código
fg157177
Banca
FGV
Órgão
TJ RJ
Ano
2026
Cargo
AJ ( )
Considere o script SQL a seguir.   CREATE TABLE PROCESSOS (           id_processo INT PRIMARY KEY,           comarca VARCHAR(100) NOT NULL,           status VARCHAR(50) NOT NULL ); INSERT INTO PROCESSOS (id_processo, comarca, status) VALUES (1, 'Comarca A', 'Ativo'), (2, 'Comarca A', 'Inativo'), (3, 'Comarca B', 'Ativo'), (4, 'Comarca C', 'Cancelado'), (5, 'Comarca B', 'Ativo');   Para listar apenas as comarcas que possuem mais de um processo ativo, deve-se utilizar a query:
  1. ASELECT comarca FROM PROCESSOS WHERE status = 'Ativo' GROUP BY comarca HAVING COUNT(*) > 1;
  2. BSELECT DISTINCT comarca FROM PROCESSOS WHERE id_processo IN (            SELECT id_processo            FROM PROCESSOS            WHERE status = 'Ativo');
  3. CSELECT comarca FROM PROCESSOS WHERE status = 'Ativo' AND id_processo >= 1;
  4. DSELECT comarca FROM PROCESSOS WHERE status = 'Inativo' GROUP BY comarca HAVING COUNT(*) > 1;
  5. ESELECT comarca FROM PROCESSOS GROUP BY comarca ORDER BY COUNT(*) DESC;
Revelar gabarito e comentário

GabaritoA — SELECT comarca FROM PROCESSOS WHERE status = 'Ativo' GROUP BY comarca HAVING COUNT(*) > 1;

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

Consulta SQL com GROUP BY e HAVING: agrupamento e filtro de grupos

Gabarito: letra A. A consulta correta filtra as linhas com status = 'Ativo', agrupa por comarca e usa HAVING COUNT(*) > 1 para selecionar apenas os grupos com mais de um processo ativo — é a combinação clássica de WHERE (filtro de linhas) com HAVING (filtro de grupos). A alternativa A é a única que aplica exatamente essa lógica.

A questão cobra o uso de agregação e filtro sobre grupos em SQL. Quando precisamos responder a perguntas do tipo "quais grupos têm mais de X elementos?", não basta o WHERE, porque ele filtra linhas individuais antes do agrupamento. O HAVING é a cláusula que filtra grupos já formados, permitindo usar funções de agregação como COUNT(*), SUM(), AVG() etc. A ordem lógica de execução de uma consulta com agrupamento é:

  1. FROM — define a tabela de origem;

  2. WHERE — filtra as linhas (não pode usar agregação);

  3. GROUP BY — agrupa as linhas restantes;

  4. HAVING — filtra os grupos (pode usar agregação);

  5. SELECT — projeta as colunas (após o agrupamento, só colunas do GROUP BY ou agregações);

  6. ORDER BY — ordena o resultado.

No caso concreto, a tabela PROCESSOS tem 5 registros, dos quais 3 são 'Ativo' (ids 1, 3 e 5). Agrupando por comarca, temos:

  • Comarca A: 1 ativo (id 1);

  • Comarca B: 2 ativos (ids 3 e 5);

  • Comarca C: 0 ativos.

O HAVING COUNT(*) > 1 mantém apenas a Comarca B, que é o resultado esperado. A pegadinha da banca está em confundir WHERE com HAVING: o WHERE não pode usar agregações, e o HAVING só existe após o GROUP BY. Além disso, a alternativa D filtra status = 'Inativo', o que não atende ao enunciado.

  1. 1FROM
  2. 2WHERE
  3. 3GROUP BY
  4. 4HAVING
  5. 5SELECT
  6. 6ORDER BY
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A consulta filtra as linhas com status = 'Ativo', agrupa por comarca e usa HAVING COUNT(*) > 1 para selecionar apenas os grupos com mais de um processo ativo. É exatamente a lógica pedida: primeiro reduzimos ao conjunto de processos ativos, depois agrupamos por comarca e, por fim, filtramos os grupos que têm mais de um elemento. O COUNT(*) conta as linhas de cada grupo, e o HAVING aplica a condição sobre o grupo já formado.

Alternativa B — ❌ Incorreta

A consulta usa SELECT DISTINCT comarca com um IN que seleciona todos os id_processo com status = 'Ativo'. Isso retorna as comarcas que têm pelo menos um processo ativo, não as que têm mais de um. O DISTINCT elimina duplicatas, mas não faz contagem nem filtra por quantidade. O resultado incluiria Comarca A (1 ativo) e Comarca B (2 ativos), mas também Comarca A, que não deveria aparecer.

Alternativa C — ❌ Incorreta

A consulta filtra status = 'Ativo' e id_processo >= 1, o que retorna todos os processos ativos (ids 1, 3 e 5), mas não agrupa nem conta. O resultado seria uma lista de comarcas com repetições (Comarca A, Comarca B, Comarca B), sem qualquer agregação. Não atende ao requisito de "mais de um processo ativo".

Alternativa D — ❌ Incorreta

A consulta filtra status = 'Inativo', o que é o oposto do pedido. O enunciado quer comarcas com mais de um processo ativo, não inativo. Além disso, mesmo que o filtro fosse correto, o HAVING COUNT(*) > 1 seria aplicado sobre os grupos de inativos, o que não resolve a questão.

Alternativa E — ❌ Incorreta

A consulta agrupa por comarca e ordena por COUNT(*) DESC, mas não filtra por status = 'Ativo' nem aplica HAVING. O resultado seria uma lista de todas as comarcas com a contagem total de processos (incluindo inativos e cancelados), ordenada da maior para a menor. Não há filtro para processos ativos nem condição de mínimo.

Gabarito: letra A

Link permanente: /questoes/fg157177