Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2026

Banco de DadosSQL
Código
qg685921
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Banco de Dados
Analise a seguinte consulta SQL executada em um banco de dados MySQL:SELECT cliente_id, SUM(valor) AS totalFROM pedidosWHERE SUM(valor) > 1000GROUP BY cliente_id;Ao executar essa consulta, o MySQL retornará um erro de sintaxe relacionado ao uso da função de agregação. Assinale a alternativa que apresenta a correção adequada da consulta, mantendo o objetivo de retornar os clientes cujo valor total de pedidos seja superior a 1000.
  1. ASELECT cliente_id, SUM(valor) AS totalFROM pedidosGROUP BY cliente_idHAVING SUM(valor) > 1000;
  2. BSELECT cliente_id, SUM(valor) AS totalFROM pedidosWHERE valor > 1000GROUP BY cliente_id;
  3. CSELECT cliente_id, SUM(valor) AS totalFROM pedidosGROUP BY cliente_idWHERE SUM(valor) > 1000;
  4. DSELECT cliente_id, SUM(valor) AS totalFROM pedidosHAVING SUM(valor) > 1000GROUP BY cliente_id;
  5. ESELECT cliente_id, SUM(valor) AS totalFROM pedidosWHERE valor > 1000HAVING SUM(valor) > 1000;
Revelar gabarito e comentário

GabaritoA — SELECT cliente_id, SUM(valor) AS total FROM pedidos GROUP BY cliente_id HAVING SUM(valor) > 1000;

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

Cláusula WHERE × HAVING em SQL

Gabarito: letra A. A consulta original erra ao usar SUM(valor) > 1000 na cláusula WHERE, que não aceita funções de agregação. A correção exige substituir o WHERE por HAVING após o GROUP BY, pois HAVING filtra grupos após a agregação, enquanto WHERE filtra linhas individuais antes. A alternativa A é a única que segue a sintaxe correta: GROUP BY cliente_id HAVING SUM(valor) > 1000.

A cláusula WHERE atua sobre registros individuais, e a condição é avaliada antes de qualquer agrupamento. Já a cláusula HAVING é usada para definir condições sobre grupos formados pelo GROUP BY, podendo utilizar funções de agregação como SUM, COUNT, AVG, etc. Essa distinção é essencial para consultas que exigem filtros baseados em resultados agregados.

Cláusula

Função

Aceita Função de Agregação?

Posição na Consulta

WHERE

Filtra linhas individuais antes do agrupamento

Não

Antes do GROUP BY

HAVING

Filtra grupos após o agrupamento

Sim

Após o GROUP BY

Filtros em SQL
  • 1WHERE (linhas individuais)
    • Antes do GROUP BY
    • Não aceita funções de agregação
  • 2HAVING (grupos)
    • Depois do GROUP BY
    • Aceita funções de agregação
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A consulta está sintaticamente correta: agrupa os pedidos por cliente_id, calcula o SUM(valor) para cada grupo e, com HAVING, filtra apenas os grupos cuja soma supera 1000. É exatamente o que se deseja, seguindo a ordem correta: SELECT … FROM … GROUP BY … HAVING ….

Alternativa B — ❌ Incorreta

A condição WHERE valor > 1000 filtra pedidos individuais com valor superior a 1000, mas não considera a soma total por cliente. Um cliente que tenha, por exemplo, 5 pedidos de R$ 200 cada (total = R$ 1000, que não é > 1000) seria excluído, enquanto outro com um único pedido de R$ 1500 seria incluído. O objetivo original é retornar clientes cujo total acumulado ultrapasse 1000, não pedidos isolados.

Alternativa C — ❌ Incorreta

A cláusula WHERE é colocada após GROUP BY, o que é inválido em SQL. A ordem correta das cláusulas é: WHERE antes de GROUP BY. Além disso, WHERE não aceita funções de agregação como SUM(valor).

Alternativa D — ❌ Incorreta

A cláusula HAVING aparece antes de GROUP BY, o que também é inválido. A ordem obrigatória é GROUP BY seguido de HAVING. Essa inversão gera erro de sintaxe.

Alternativa E — ❌ Incorreta

Embora a consulta seja sintaticamente válida (mescla WHERE e HAVING), ela não atende ao objetivo. O WHERE valor > 1000 filtra pedidos individuais, e depois o HAVING SUM(valor) > 1000 filtra grupos cuja soma (dos pedidos que já passaram pelo WHERE) seja > 1000. O resultado é que somente clientes que já possuem pelo menos um pedido individual acima de 1000 e cujo total (só desses pedidos) também ultrapasse 1000 são retornados. Isso difere do comando original, que não tinha restrição sobre pedidos individuais.

NÃO CAIA NESSA!

A banca testa o conhecimento da ordem e função das cláusulas WHERE e HAVING. Muitos candidatos confundem e tentam usar WHERE com agregação ou invertem a ordem. Lembre-se: WHERE antes do agrupamento (filtra linhas), HAVING depois (filtra grupos).

Gabarito: letra A.

Link permanente: /questoes/qg685921