Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2025
Banco de Dados›Consultas e Comandos em SQL
Código
qa699056
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2025
Cargo
ANC ( )
Considere uma tabela pedido que possui as colunas cliente e produto no seguinte trecho de código escrito em PL/SQL. O que acontecerá após executá-lo? SELECT * FROM ( SELECT cliente, produto FROM pedido ) PIVOT ( COUNT(produto) FOR produto IN (123, 124, 125) ) ORDER BY cliente;
AApresenta uma linha para cada cliente e uma coluna para cada produto da cláusula IN com a contagem de cada produto por cliente.
BExibe uma linha para cada produto da cláusula IN contendo a contagem de produtos.
CExibe uma linha para cada produto da cláusula IN contendo a contagem de produtos, bem como uma linha abaixo com o subtotal por cliente.
DMostra a contagem de produtos da cláusula IN em uma única linha e o subtotal por cliente em uma linha abaixo.
EApresenta erro de sintaxe.
Revelar gabarito e comentário▾
GabaritoA — Apresenta uma linha para cada cliente e uma coluna para cada produto da cláusula IN com a contagem de cada produto por cliente.
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”.
PIVOT no Oracle PL/SQL
Gabarito: letra A. A cláusula PIVOT transforma linhas em colunas: para cada valor distinto da coluna produto listado no IN (123, 124, 125), cria-se uma coluna com a contagem (COUNT(produto)) daquele produto, agrupada por cliente. O resultado final tem uma linha para cada cliente e uma coluna para cada produto da lista, exatamente como descreve a alternativa A.
O PIVOT é um recurso de SQL para transposição de dados (também chamado de cross-tab ou tabela dinâmica). Ele pega valores que estão em linhas de uma coluna e os "espalha" como colunas no resultado, aplicando uma função de agregação (aqui, COUNT) sobre os valores de cada grupo. No código da questão, a subconsulta interna apenas seleciona cliente e produto da tabela pedido; em seguida, o PIVOT agrupa implicitamente por cliente (a coluna que não aparece na cláusula FOR) e, para cada produto da lista IN (123, 124, 125), gera uma coluna com a contagem de ocorrências daquele produto para aquele cliente.
Vamos decompor o que acontece passo a passo:
A subconsulta SELECT cliente, produto FROM pedido retorna todas as linhas da tabela, com as duas colunas.
O PIVOT recebe essa subconsulta como entrada. A cláusula FOR produto IN (123, 124, 125) define quais valores de produto virarão colunas.
A função COUNT(produto) é aplicada para cada combinação de cliente e valor de produto da lista. Internamente, o Oracle agrupa por cliente (a coluna que não é pivô) e conta quantas linhas existem para cada produto.
O ORDER BY cliente apenas ordena o resultado final pelo nome do cliente.
O resultado é uma tabela com a seguinte estrutura: uma coluna cliente e três colunas nomeadas '123', '124' e '125' (os valores do IN), cada uma contendo a contagem de pedidos daquele produto para aquele cliente. Se um cliente não tiver nenhum pedido de um dos produtos, a célula correspondente recebe 0 (o PIVOT preenche com zero quando não há ocorrência, a menos que se use a cláusula INCLUDE NULLS).
A pegadinha da questão está em confundir o PIVOT com um simples GROUP BY ou com uma agregação que gera subtotais. O PIVOTnão produz linhas de subtotal — ele apenas reorganiza os dados em formato de colunas. As alternativas B, C e D descrevem comportamentos de outras operações (como GROUP BY com ROLLUP ou CUBE), que geram linhas de total/subtotal, mas não é o caso aqui. A alternativa E está incorreta porque a sintaxe do PIVOT está correta e é suportada pelo Oracle.
Guarde a essência: PIVOT = linhas viram colunas, com agregação por grupo. É isso que separa a alternativa correta das demais.
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa descreve com precisão o funcionamento do PIVOT: uma linha para cada cliente (agrupamento implícito pela coluna não pivô) e uma coluna para cada produto da cláusula IN, com a contagem de cada produto por cliente. É exatamente o que o código produz.
Alternativa B — ❌ Incorreta
Afirma que o resultado exibe "uma linha para cada produto da cláusula IN". Isso descreveria um GROUP BY produto, que geraria uma linha por produto — mas o PIVOT faz o oposto: cada produto vira uma coluna, não uma linha. O agrupamento é por cliente, não por produto.
Alternativa C — ❌ Incorreta
Além do erro da alternativa B (linha por produto), acrescenta "uma linha abaixo com o subtotal por cliente". O PIVOT não gera subtotais — isso seria resultado de GROUP BY ... WITH ROLLUP ou CUBE. O PIVOT apenas reorganiza os dados; não há linhas extras de total.
Alternativa D — ❌ Incorreta
Diz que o resultado mostra a contagem "em uma única linha" e o subtotal por cliente "em uma linha abaixo". Isso descreveria uma agregação sem GROUP BY (uma única linha com o total geral) seguida de subtotais — comportamento de ROLLUP. O PIVOT gera uma linha por cliente, não uma única linha global, e não produz subtotais.
Alternativa E — ❌ Incorreta
A sintaxe do PIVOT está correta e é suportada pelo Oracle. Não há erro de sintaxe no código apresentado.
PEGA ESSA DICA!
Para questões de PIVOT, pergunte-se: "o que vira linha e o que vira coluna?". A coluna que não aparece no FOR é a que define as linhas (agrupamento); os valores do IN definem as colunas. Se a alternativa falar em "linha por produto" ou "subtotal", está descrevendo outra operação — elimine na hora.