Pular para o conteúdo principal

Questão de Banco de Dados — SQL — CESPE / CEBRASPE 2026

Banco de DadosSQL
Código
ce227873
Banca
CESPE / CEBRASPE
Órgão
SEFAZ-PR
Ano
2026
Nível
Médio
Cargo
Agente Fazendário Estadual - Função: Profissional de Tecnologia da Informação
Imagem associada para resolução da questãoAs tabelas contribuinte e pagamento apresentadas anteriormente fazem parte do banco de dados da secretaria de fazenda de certo ente federativo. A administração tributária deste ente deseja listar os nomes dos contribuintes cujo valor total de pagamentos é superior à média total dos pagamentos de todos os contribuintes.A partir dessa situação hipotética, assinale a opção em que é corretamente apresentada a instrução adequada, de acordo com o padrão SQL/ANSI, para se obter a lista desejada pela administração tributária.
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoB — [imagem]

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

Consultas SQL com subconsulta e funções de agregação

Gabarito: letra B. Para listar os contribuintes cujo total de pagamentos supera a média geral, a instrução correta combina GROUP BY com a função de agregação SUM e uma subconsulta escalar que calcula a média total — a alternativa B é a única que aplica essa estrutura de forma sintaticamente válida no padrão SQL/ANSI.

O problema pede uma consulta que compare o valor agregado de cada grupo (cada contribuinte) com um valor global (a média de todos os pagamentos). Isso exige duas operações distintas: primeiro, agrupar os pagamentos por contribuinte e somar os valores de cada um; depois, comparar cada soma com a média geral calculada sobre todos os registros. A função AVG calcula a média de uma coluna, e SUM totaliza os valores de um grupo. A subconsulta (SELECT AVG(valor) FROM pagamento) retorna um único valor escalar — a média de todos os pagamentos — que pode ser usado diretamente na comparação do HAVING.

A cláusula HAVING é o ponto central: ela filtra grupos após a agregação, diferentemente do WHERE, que filtra linhas antes da agregação. Como a condição envolve o resultado de SUM(valor) — um valor que só existe depois do agrupamento —, o filtro precisa estar no HAVING. A subconsulta escalar no HAVING é avaliada uma única vez e comparada com cada total de grupo, o que atende exatamente ao requisito do enunciado.

Um exemplo concreto: se a tabela pagamento tem os registros (contribuinte A, R$ 100), (A, R$ 200), (B, R$ 50), a média geral é (100+200+50)/3 = R$ 116,67. O total de A é R$ 300, que supera a média; o total de B é R$ 50, que não supera. A consulta correta retornaria apenas o nome de A. A pegadinha clássica da banca é colocar a condição de agregação no WHERE (que não enxerga totais de grupo) ou usar AVG no lugar de SUM para o total individual.

Guarde a fronteira entre WHERE e HAVING: o primeiro filtra linhas antes do agrupamento; o segundo filtra grupos depois da agregação. É exatamente nessa distinção que as alternativas se dividem.

  1. 1GROUP BY contribuinte
  2. 2SUM(valor) por grupo
  3. 3HAVING compara com AVG geral
  4. 4Retorna nomes que superam
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Esta alternativa usa WHERE para filtrar o resultado da agregação SUM(valor). O WHERE é avaliado antes do GROUP BY, quando os totais por contribuinte ainda não foram calculados — a condição SUM(valor) > (SELECT AVG(valor) FROM pagamento) não pode ser avaliada nesse momento, pois SUM é uma função de agregação que só existe após o agrupamento. O correto seria usar HAVING.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta alternativa aplica a estrutura correta: GROUP BY para agrupar por contribuinte, SUM(valor) para calcular o total de cada grupo, e HAVING para filtrar os grupos cujo total supera a média geral, obtida por uma subconsulta escalar (SELECT AVG(valor) FROM pagamento). A ordem das cláusulas segue o padrão SQL/ANSI: SELECTFROMGROUP BYHAVING.

Alternativa C — ❌ Incorreta

Esta alternativa usa AVG(valor) no lugar de SUM(valor) para calcular o total por contribuinte. Isso retornaria a média dos pagamentos de cada contribuinte, não o total — o que não atende ao requisito de "valor total de pagamentos". Além disso, se a condição estiver no WHERE, o erro de usar WHERE com agregação também se aplica.

Alternativa D — ❌ Incorreta

Esta alternativa provavelmente usa WHERE com a condição de agregação, o que é inválido, ou omite o GROUP BY necessário para agregar por contribuinte. Sem o GROUP BY, a consulta trataria todos os registros como um único grupo, e a condição não faria sentido para listar contribuintes individuais.

Alternativa E — ❌ Incorreta

Esta alternativa provavelmente usa HAVING sem GROUP BY, o que é inválido no padrão SQL — HAVING só pode ser usado em conjunto com GROUP BY. Sem o agrupamento, não há grupos para filtrar, e a consulta não retornaria a lista de contribuintes.

NÃO CAIA NESSA!

Na prova, identifique o padrão: quando a condição envolve uma função de agregação (SUM, AVG, COUNT), o filtro vai no HAVING, nunca no WHERE. E lembre-se: SUM totaliza, AVG calcula a média — a banca adora trocar esses dois.

Gabarito: letra B

Link permanente: /questoes/ce227873