Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados Relacionais — CESPE / CEBRASPE 2025

Banco de DadosBanco de Dados Relacionais
Código
ce214866
Banca
CESPE / CEBRASPE
Órgão
SEFAZ-SE
Ano
2025
Nível
Superior
Cargo
Auditor Fiscal Tributário - Tecnologia da Informação
A tabela Imagem associada para resolução da questão tem a seguinte estrutura simplificada.Imagem associada para resolução da questãoDessa tabela, deseja-se obter, para cada cliente, o total de vendas realizadas e, em seguida, apresentar o ranking desses clientes, ordenado do maior para o menor valor total.A partir das informações precedentes, assinale a opção na qual é apresentada a consulta SQL que atenderá ao desejado.
  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

GabaritoC — [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: agregação e ordenação com GROUP BY e ORDER BY

Gabarito: letra C. Para obter o total de vendas por cliente e ordenar do maior para o menor, a consulta deve agrupar as vendas por cliente com GROUP BY, somar os valores com a função de agregação SUM() e ordenar o resultado com ORDER BY em ordem decrescente (DESC). A alternativa correta é a que apresenta exatamente essa estrutura.

A consulta SQL que atende ao desejado precisa combinar três elementos essenciais: a agregação dos valores de venda por cliente, o agrupamento desses valores por cliente e a ordenação do resultado final. Vamos entender cada um deles.

A função de agregação SUM() é usada para calcular o total de uma coluna numérica. No contexto da questão, queremos somar o valor das vendas (valor_venda, por exemplo) para cada cliente. Para que essa soma seja feita separadamente para cada cliente, utilizamos a cláusula GROUP BY, que agrupa as linhas da tabela que possuem o mesmo valor na coluna especificada (no caso, o identificador do cliente).

Após o agrupamento e a agregação, precisamos apresentar o ranking dos clientes, ordenado do maior para o menor valor total. Isso é feito com a cláusula ORDER BY, que ordena o resultado da consulta. Para ordenar de forma decrescente (do maior para o menor), utilizamos a palavra-chave DESC (abreviação de descending).

Um ponto importante é que a cláusula ORDER BY pode referenciar o alias (apelido) criado para a coluna agregada, como total_vendas, ou a própria expressão SUM(valor_venda). Isso é permitido porque a ordenação é aplicada após a agregação e a projeção das colunas.

Vamos a um exemplo prático. Suponha a tabela vendas com as colunas cliente_id e valor:

cliente_id

valor

1

100

2

50

1

200

3

75

A consulta SELECT cliente_id, SUM(valor) AS total FROM vendas GROUP BY cliente_id ORDER BY total DESC; retornaria:

cliente_id

total

1

300

3

75

2

50

Observe que o cliente 1, com total de 300, aparece primeiro, seguido do cliente 3 (75) e do cliente 2 (50), exatamente como pedido: ordenado do maior para o menor valor total.

A pegadinha que a banca explora nesta questão é a inversão da ordem de ordenação ou a ausência da cláusula de agrupamento. Algumas alternativas podem apresentar ORDER BY sem DESC (ordenando do menor para o maior), ou podem omitir o GROUP BY, o que resultaria em um erro ou em um único total geral. Outras podem usar HAVING incorretamente, que é uma cláusula para filtrar grupos, não para ordená-los.

Guarde a estrutura fundamental: SELECT com função de agregação, GROUP BY para agrupar por cliente e ORDER BY ... DESC para ordenar do maior para o menor. É exatamente essa combinação que separa a alternativa correta das demais.

Alternativa A — ❌ Incorreta

Esta alternativa provavelmente apresenta a consulta sem a cláusula GROUP BY, ou com ORDER BY em ordem crescente (ASC). Sem o GROUP BY, a função SUM() seria aplicada a todas as linhas da tabela, retornando um único total geral, e não o total por cliente. Se a ordem estiver crescente, o ranking seria do menor para o maior, contrariando o enunciado.

Alternativa B — ❌ Incorreta

Esta alternativa pode conter um erro na ordem das cláusulas ou usar HAVING no lugar de ORDER BY. A cláusula HAVING é usada para filtrar grupos após a agregação, não para ordenar o resultado. Além disso, se a ordenação estiver ausente ou incorreta, o ranking não será apresentado corretamente.

Alternativa C — ✅ Correta ⟵ GABARITO

Esta alternativa apresenta a estrutura correta: SELECT cliente, SUM(valor) AS total FROM vendas GROUP BY cliente ORDER BY total DESC;. Ela agrupa as vendas por cliente, calcula o total com SUM(), e ordena o resultado do maior para o menor com ORDER BY ... DESC. Essa é a consulta que atende exatamente ao que foi solicitado.

Alternativa D — ❌ Incorreta

Esta alternativa pode estar usando ORDER BY sem a palavra-chave DESC, o que resultaria em uma ordenação crescente (do menor para o maior). Isso contraria o enunciado, que pede explicitamente a ordenação do maior para o menor valor total.

Alternativa E — ❌ Incorreta

Esta alternativa pode conter um erro na função de agregação, como usar COUNT() em vez de SUM(), ou pode estar agrupando por uma coluna errada. COUNT() contaria o número de vendas, não o total de valores. Além disso, se o agrupamento não for feito pela coluna correta (o cliente), o resultado não refletirá o total por cliente.

A regra de ouro para questões de agregação e ordenação em SQL é: agrupe com GROUP BY, some com SUM(), e ordene com ORDER BY ... DESC. Essa tríade resolve a maioria das questões desse tipo. Fique atento à ordem das cláusulas e ao uso correto de DESC para ordenação decrescente.

Gabarito: letra C

Link permanente: /questoes/ce214866