Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — VUNESP 2023

Banco de DadosConsultas e Comandos em SQL
Código
vu195958
Banca
VUNESP
Órgão
CIJUN
Ano
2023
Cargo
Ana ( )

A seguinte query SQL foi encontrada como parte de um processo ETL.

 

SELECT categoria_produto,

SUM(preco_venda) AS total_vendas

FROM vendas

GROUP BY categoria_produto

 

Essa query, por si só,

  1. Acria uma coluna na tabela vendas denominada total_vendas.
  2. Batualiza a coluna total_vendas da tabela vendas com a soma do preço de venda dos produtos da categoria.
  3. Cagrupa os registros da tabela vendas que possuem o mesmo valor para a coluna categoria_produto, mantendo um único registro para cada categoria e excluindo os demais da tabela.
  4. Dcalcula a soma dos preços de venda de todos os registros da tabela vendas, retornando um único valor total, sem modificar a tabela.
  5. Ecalcula a soma dos preços de venda de cada categoria de produto e retorna o resultado, sem modificar a tabela vendas.
Revelar gabarito e comentário

GabaritoE — calcula a soma dos preços de venda de cada categoria de produto e retorna o resultado, sem modificar a tabela vendas.

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 GROUP BY e funções de agregação no SQL

Gabarito: letra E. A query SELECT categoria_produto, SUM(preco_venda) AS total_vendas FROM vendas GROUP BY categoria_produto calcula a soma dos preços de venda para cada categoria de produto, retornando um resultado temporário, sem modificar a tabela vendas. A cláusula GROUP BY agrupa os registros por categoria_produto e a função de agregação SUM soma os valores de preco_venda dentro de cada grupo.

A linguagem SQL (Structured Query Language) é a linguagem padrão para manipulação de bancos de dados relacionais. Dentro dela, as consultas SELECT são usadas para recuperar dados, não para modificá-los. A query do enunciado é uma consulta de leitura: ela apenas lê os dados da tabela vendas e produz um resultado derivado. Para entender por que a alternativa E é a correta, é essencial compreender o papel de duas construções: a função de agregação SUM e a cláusula GROUP BY.

As funções de agregação (como SUM, COUNT, AVG, MAX, MIN) resumem um conjunto de linhas em um único valor. Quando usadas sem GROUP BY, elas operam sobre todas as linhas da tabela (ou sobre as linhas filtradas pelo WHERE), retornando um único valor. Por exemplo, SELECT SUM(preco_venda) FROM vendas retornaria a soma de todos os preços de venda da tabela inteira — um único número.

A cláusula GROUP BY muda esse comportamento: ela divide as linhas em grupos com base nos valores de uma ou mais colunas. No caso, GROUP BY categoria_produto cria um grupo para cada valor distinto de categoria_produto. A função de agregação é então aplicada dentro de cada grupo, produzindo um resultado por grupo. Assim, a query retorna uma linha para cada categoria, com a soma dos preços de venda daquela categoria.

Um ponto crucial: a query não modifica a tabela vendas. Ela apenas lê os dados e devolve um resultado temporário. Para modificar dados, seriam necessários comandos como UPDATE (para alterar registros existentes), INSERT (para adicionar novos) ou DELETE (para remover). A query do enunciado é uma operação de leitura pura, típica de processos de extração de dados (ETL), onde o objetivo é justamente extrair informações sem alterar a fonte.

A pegadinha da questão está em confundir o resultado da consulta com uma modificação na tabela. Muitos candidatos, ao verem AS total_vendas, pensam que a query cria uma coluna na tabela — mas o alias (AS) apenas dá um nome à coluna do resultado temporário, não cria nada na estrutura da tabela. Da mesma forma, a ideia de que a query "atualiza" ou "exclui" registros é um equívoco: nenhum comando de modificação (UPDATE, DELETE, INSERT) está presente.

Para fixar: a query com GROUP BY e SUM é uma consulta de agregação que retorna um resumo por categoria, sem efeitos colaterais na tabela. É exatamente isso que a alternativa E descreve.

  1. 1SELECT lê dados
  2. 2GROUP BY divide em grupos
  3. 3SUM agrega por grupo
  4. 4Resultado temporário
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A query não cria nenhuma coluna na tabela vendas. O alias AS total_vendas apenas nomeia a coluna do resultado da consulta, que é um conjunto de dados temporário. Para criar uma coluna na tabela, seria necessário um comando ALTER TABLE (DDL), não um SELECT.

Alternativa B — ❌ Incorreta

A query não atualiza a coluna total_vendas da tabela. Para atualizar registros, seria necessário o comando UPDATE (DML). Além disso, a tabela vendas nem sequer possui uma coluna chamada total_vendas — ela é apenas um alias no resultado.

Alternativa C — ❌ Incorreta

A query agrupa os registros por categoria_produto, mas não exclui nenhum registro da tabela. O GROUP BY apenas organiza os dados para a agregação; a tabela original permanece intacta. Para excluir registros, seria necessário DELETE.

Alternativa D — ❌ Incorreta

A query não calcula a soma de todos os registros da tabela. Ela calcula a soma por categoria, graças ao GROUP BY. Sem o GROUP BY, a query retornaria um único valor total; com ele, retorna um valor por grupo. A alternativa D descreve o comportamento de SELECT SUM(preco_venda) FROM vendas (sem GROUP BY), não da query do enunciado.

Alternativa E — ✅ Correta ⟵ GABARITO

A query calcula a soma dos preços de venda de cada categoria de produto (devido ao GROUP BY categoria_produto + SUM(preco_venda)) e retorna o resultado como um conjunto de linhas temporário, sem modificar a tabela vendas. É exatamente o que a alternativa descreve.

PEGA ESSA DICA!

Para diferenciar SUM com e sem GROUP BY, lembre-se: sem GROUP BY, a agregação opera sobre todas as linhas (um único resultado); com GROUP BY, opera sobre cada grupo (um resultado por grupo). Na prova, leia a query com atenção: se houver GROUP BY, o resultado é agrupado; se não houver, é global.

Gabarito: letra E

Link permanente: /questoes/vu195958