Pular para o conteúdo principal

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

Banco de DadosSQL
Código
qg685913
Banca
FUNDATEC
Órgão
IFC-SC
Ano
2026
Nível
Superior
Cargo
Professor EBTT - Informática: Banco de Dados
Considere a tabela VENDAS(id venda, vendedor, valor) em um banco de dados MySQL. Um analista deseja obter exclusivamente o nome do vendedor com o maior valor total de vendas, considerando que pode haver empate entre vendedores. Assinale a consulta SQL que atende corretamente ao objetivo.
  1. ASELECT vendedorFROM vendasGROUP BY vendedorORDER BY SUM(valor) DESCLIMIT 1;
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DSELECT vendedor, MAX(SUM(valor))FROM vendasGROUP BY vendedor;
  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”.

SQL: Consulta para obter o vendedor com maior valor total de vendas (considerando empates)

Gabarito: letra B — A consulta correta deve usar uma subconsulta para encontrar o maior valor total de vendas e depois selecionar os vendedores cuja soma seja igual a esse máximo, garantindo que todos os vendedores empatados sejam retornados.

A banca testa o conhecimento sobre funções de agregação, agrupamento e o tratamento de empates. O enunciado deixa claro que pode haver empate, então soluções com LIMIT 1 ou MAX aplicado diretamente sobre a soma não funcionam.

Alternativa

Consulta SQL

Funciona?

Trata empates?

Motivo

A

SELECT vendedor FROM vendas GROUP BY vendedor ORDER BY SUM(valor) DESC LIMIT 1;

LIMIT 1 retorna apenas um vendedor, ignorando empates.

B

Subconsulta: SELECT vendedor FROM vendas GROUP BY vendedor HAVING SUM(valor) = (SELECT MAX(total) FROM (SELECT SUM(valor) AS total FROM vendas GROUP BY vendedor) AS sub);

Filtra grupos cuja soma é igual ao maior total, retornando todos os empatados.

C

(Não especificada)

Provável erro semântico ou sintático (ex.: HAVING sem GROUP BY).

D

SELECT vendedor, MAX(SUM(valor)) FROM vendas GROUP BY vendedor;

MAX(SUM(valor)) é inválido (aninhamento de agregações proibido).

  1. 1Agrupar por vendedor
  2. 2Calcular SUM(valor) por grupo
  3. 3Encontrar o MAX(total)
  4. 4Filtrar grupos com SUM = MAX
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

SELECT vendedor
FROM vendas
GROUP BY vendedor
ORDER BY SUM(valor) DESC
LIMIT 1;

O uso de LIMIT 1 resolve o problema do maior valor, mas desconsidera empates: se dois ou mais vendedores tiverem o mesmo total máximo, apenas um será retornado. A cláusula LIMIT é aplicada após a ordenação e simplesmente corta as primeiras linhas, independentemente de existirem valores iguais. Portanto, não atende ao requisito de considerar possíveis empates.

Alternativa B — ✅ Correta ⟵ GABARITO

Como a alternativa está representada por uma imagem no enunciado original, deduzimos que a consulta correta segue o padrão:

SELECT vendedor
FROM vendas
GROUP BY vendedor
HAVING SUM(valor) = (SELECT MAX(total) FROM (SELECT SUM(valor) AS total FROM vendas GROUP BY vendedor) AS sub);

Essa estrutura utiliza uma subconsulta para calcular o maior total (MAX da soma) e depois filtra os grupos cuja soma seja igual a esse valor. Assim, todos os vendedores com o maior total são retornados, mesmo em caso de empate. É a única abordagem que satisfaz o objetivo.

Alternativa C — ❌ Incorreta

Não temos o texto exato, mas pela lógica da banca, provavelmente contém erro semântico ou sintático, como uso incorreto de HAVING sem GROUP BY ou tentativa de comparar diretamente com MAX(SUM(valor)).

Alternativa D — ❌ Incorreta

SELECT vendedor, MAX(SUM(valor))
FROM vendas
GROUP BY vendedor;

A expressão MAX(SUM(valor)) é inválida no SQL padrão e no MySQL. Não é permitido aninhar funções de agregação diretamente; qualquer agregação aninhada exige uma subconsulta. Além disso, a consulta retornaria uma linha por vendedor com a soma de cada um, e o MAX não teria efeito útil — na verdade, geraria um erro de sintaxe.

Alternativa E — ❌ Incorreta

Assim como a C, não temos o texto, mas a tendência é que contenha algum equívoco, como não agrupar corretamente ou usar LIMIT sem considerar empates.

PEGA ESSA DICA!

Quando o enunciado menciona “considerando que pode haver empate”, descarte automaticamente qualquer solução que use LIMIT 1 ou TOP 1. A forma correta é calcular o valor máximo das agregações em uma subconsulta e usar HAVING para filtrar. Memorize essa estrutura:

SELECT coluna_agrupada
FROM tabela
GROUP BY coluna_agrupada
HAVING funcao_agregacao(coluna) = (SELECT MAX(total) FROM (SELECT funcao_agregacao(coluna) AS total FROM tabela GROUP BY coluna_agrupada) AS alias);

Gabarito: letra B — a única consulta que respeita a possibilidade de empate e retorna exclusivamente o(s) vendedor(es) com o maior valor total de vendas.

Link permanente: /questoes/qg685913