Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403598
Banca
CESPE / CEBRASPE
Órgão
CNPq
Ano
2024
Cargo
Ana CT I ( )
Tendo como referência a tabela precedente, de nome dados, julgue o item subsequente, com relação à SQL. Considere-se a seguinte expressão SQL.   select categoria, modelo, sum(valor) from dados group by cube(categoria, modelo) Essa expressão, após executada, apresentará o resultado a seguir.Imagem associada para resolução da questãoImagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

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 – Cláusula GROUP BY CUBE

Gabarito: Certo. A expressão GROUP BY CUBE(categoria, modelo) gera todas as combinações possíveis de agrupamento entre as colunas categoria e modelo, incluindo os subtotais e o total geral, o que corresponde exatamente ao resultado apresentado na figura. A cláusula CUBE é uma extensão do GROUP BY que produz um conjunto de linhas com todas as combinações de agrupamento, e é isso que a questão explora.

A cláusula GROUP BY é usada para agrupar linhas que têm os mesmos valores em colunas específicas, permitindo aplicar funções de agregação como SUM, AVG, COUNT, MAX e MIN a cada grupo. No SQL padrão, além do GROUP BY simples, existem as extensões ROLLUP e CUBE, que geram subtotais e totais. O CUBE é o mais abrangente: ele calcula agregações para todas as combinações possíveis das colunas listadas. Se você tem duas colunas, categoria e modelo, o CUBE gera quatro níveis de agrupamento: (categoria, modelo), (categoria), (modelo) e (), onde () representa o total geral sem agrupamento. Isso é diferente do ROLLUP, que gera apenas uma hierarquia de subtotais, do mais específico para o mais geral, sem incluir todas as combinações.

Vamos entender com um exemplo prático. Suponha que a tabela dados tenha os seguintes registros:

categoria

modelo

valor

A

X

10

A

Y

20

B

X

30

B

Y

40

A consulta SELECT categoria, modelo, SUM(valor) FROM dados GROUP BY CUBE(categoria, modelo) produziria o seguinte resultado:

categoria

modelo

SUM(valor)

A

X

10

A

Y

20

A

NULL

30

-- subtotal de A

B

X

30

B

Y

40

B

NULL

70

-- subtotal de B

NULL

X

40

-- subtotal de X

NULL

Y

60

-- subtotal de Y

NULL

NULL

100

-- total geral

Observe que as linhas com NULL em uma ou ambas as colunas representam os subtotais e o total geral. A ordem das linhas pode variar conforme o SGBD, mas o conjunto de linhas é exatamente esse. A figura apresentada na questão mostra esse mesmo padrão de resultado, com as linhas de subtotal e total geral, o que confirma que a expressão SQL está correta.

A pegadinha que a banca explora aqui é a confusão entre CUBE e ROLLUP. O ROLLUP gera apenas uma hierarquia de subtotais, do mais específico para o mais geral, sem incluir todas as combinações. Por exemplo, GROUP BY ROLLUP(categoria, modelo) geraria apenas os grupos (categoria, modelo), (categoria) e (), mas não o grupo (modelo) isolado. Já o CUBE inclui todas as combinações, inclusive o grupo (modelo) isolado. Se a figura mostrasse apenas os subtotais de categoria e o total geral, sem os subtotais de modelo, a resposta seria Errado. Mas como a figura mostra todas as combinações, a resposta é Certo.

Outra confusão comum é pensar que o CUBE é equivalente a um GROUP BY simples com todas as colunas, mas não é: o GROUP BY simples agrupa apenas pela combinação exata das colunas, sem gerar subtotais. O CUBE é uma extensão que adiciona as linhas de subtotal e total. Portanto, a expressão apresentada está correta e produz o resultado mostrado.

Item — ✅ CERTO

A expressão SELECT categoria, modelo, SUM(valor) FROM dados GROUP BY CUBE(categoria, modelo) está correta e produz o resultado apresentado na figura. O CUBE gera todas as combinações possíveis de agrupamento entre categoria e modelo, incluindo os subtotais de cada coluna e o total geral, que é exatamente o que a figura mostra. A cláusula CUBE é uma extensão do GROUP BY que calcula agregações para todas as combinações de colunas listadas, e a figura reflete esse comportamento.

NÃO CAIA NESSA!

A banca explora a diferença entre CUBE e ROLLUP. O ROLLUP gera apenas uma hierarquia de subtotais (categoria, modelo → categoria → total), enquanto o CUBE gera todas as combinações (categoria, modelo → categoria → modelo → total). Se a figura mostrasse apenas os subtotais de categoria e o total geral, a resposta seria Errado. Mas como a figura mostra todas as combinações, a resposta é Certo. Fique atento a essa distinção, pois é uma pegadinha clássica em questões de SQL.

Gabarito: Certo

Link permanente: /questoes/ce403598