Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FGV 2024

Banco de DadosConsultas e Comandos em SQL
Código
fg165281
Banca
FGV
Órgão
Pref Nova Iguaçu
Ano
2024
Cargo
Cont ( )

Um banco de dados relacional foi construído utilizando o código SQL a seguir:

 

Imagem associada para resolução da questão

 

OBS: Neste banco de dados, cadeias de caracteres (strings) são representadas envoltas em aspas simples.

 

Considere a consulta SQL a seguir:

 

select c.descricao, lc.data, avg(lc.valor)

from tb_lanc_contabeis lc join tb_contas c

on lc.id_conta = c.id

group by c.descricao, lc.data

order by 2 desc

 

Com relação à sua estrutura, a consulta

  1. Aapresentará os dados ordenados de forma decrescente pelo atributo c.descricao.
  2. Blistará a média de valores de lançamentos contábeis por descrição de conta e data do lançamento contábil.
  3. Cpossui um erro estrutural pela falta da declaração da cláusula HAVING, não podendo ser executada.
  4. Dproduz na cláusula FROM uma visão em linha, fruto da junção de tabelas realizada.
  5. Erealiza uma junção externa entre as tabelas tb_lanc_contabeis e tb_contas.
Revelar gabarito e comentário

GabaritoB — listará a média de valores de lançamentos contábeis por descrição de conta e data do lançamento contábil.

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”.

Consulta SQL com GROUP BY e ORDER BY: Agregação e Ordenação

Gabarito: letra B. A consulta agrupa os lançamentos contábeis por descrição da conta e data do lançamento, calculando a média dos valores de cada grupo — exatamente o que a alternativa B descreve. A cláusula GROUP BY define os grupos e a função de agregação AVG calcula a média por grupo, enquanto o ORDER BY 2 DESC ordena o resultado pela segunda coluna (a data) de forma decrescente.

A consulta apresentada é um exemplo clássico de consulta com agregação em SQL. Vamos entender cada parte:

  • SELECT c.descricao, lc.data, avg(lc.valor): seleciona a descrição da conta, a data do lançamento e a média dos valores dos lançamentos.

  • FROM tb_lanc_contabeis lc JOIN tb_contas c ON lc.id_conta = c.id: realiza uma junção interna (INNER JOIN) entre as tabelas de lançamentos contábeis e contas, relacionando cada lançamento à sua conta correspondente.

  • GROUP BY c.descricao, lc.data: agrupa os registros por descrição da conta e data. Para cada grupo, a função AVG calcula a média dos valores.

  • ORDER BY 2 DESC: ordena o resultado pela segunda coluna da lista de seleção, que é lc.data, em ordem decrescente.

A cláusula GROUP BY é essencial quando usamos funções de agregação como AVG, SUM, COUNT, MAX, MIN. Ela define os grupos sobre os quais a agregação será aplicada. Sem o GROUP BY, a função de agregação atuaria sobre todas as linhas da tabela, retornando um único valor. A cláusula ORDER BY pode referenciar colunas por nome ou por posição (número ordinal) na lista de seleção; ORDER BY 2 refere-se à segunda coluna, que é lc.data.

A consulta não possui erro estrutural: a cláusula HAVING é opcional e só é necessária quando queremos filtrar grupos após a agregação. A junção realizada é uma junção interna (INNER JOIN), que retorna apenas as linhas que têm correspondência nas duas tabelas. A cláusula FROM com JOIN produz uma tabela resultante da combinação das duas tabelas, não uma "visão em linha".

  1. 1FROM + JOIN (junção interna)
  2. 2GROUP BY descrição e data
  3. 3AVG(valor) por grupo
  4. 4ORDER BY 2 DESC (data)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A alternativa afirma que os dados serão ordenados de forma decrescente pelo atributo c.descricao. Na verdade, o ORDER BY 2 DESC ordena pela segunda coluna da lista de seleção, que é lc.data (a data), e não pela descrição. A descrição é a primeira coluna (c.descricao), e não é usada na ordenação. A banca tenta confundir o candidato fazendo-o acreditar que a ordenação é pela primeira coluna ou pela descrição.

Alternativa B — ✅ Correta ⟵ GABARITO

A consulta agrupa os lançamentos por c.descricao e lc.data, e para cada grupo calcula a média dos valores (avg(lc.valor)). Portanto, o resultado lista a média de valores de lançamentos contábeis por descrição de conta e data do lançamento. A alternativa descreve exatamente o que a consulta faz.

Alternativa C — ❌ Incorreta

A alternativa afirma que a consulta possui erro estrutural pela falta da cláusula HAVING. Isso é falso: a cláusula HAVING é opcional e só é necessária quando queremos filtrar grupos após a agregação. A consulta é válida sem ela. A banca tenta confundir o candidato fazendo-o acreditar que HAVING é obrigatória quando há GROUP BY.

Alternativa D — ❌ Incorreta

A alternativa afirma que a cláusula FROM produz uma "visão em linha" fruto da junção de tabelas. Na verdade, a junção (JOIN) produz uma tabela resultante (conjunto de linhas) que combina as colunas das duas tabelas, não uma "visão em linha". O termo "visão em linha" não é um conceito padrão em SQL. A banca tenta confundir com o conceito de "view" (visão), que é uma tabela virtual, mas não é o caso aqui.

Alternativa E — ❌ Incorreta

A alternativa afirma que a consulta realiza uma junção externa (OUTER JOIN). Na verdade, a consulta usa JOIN sem a palavra LEFT, RIGHT ou FULL, o que caracteriza uma junção interna (INNER JOIN). A junção externa preservaria linhas sem correspondência, o que não é o caso. A banca tenta confundir o candidato com os tipos de junção.

NÃO CAIA NESSA!

A banca explora a confusão entre ORDER BY por posição e por nome, e entre INNER JOIN e OUTER JOIN. Lembre-se: ORDER BY 2 refere-se à segunda coluna da lista de seleção, e JOIN sem modificador é INNER JOIN.

PEGA ESSA DICA!

Para resolver questões de SQL, identifique primeiro as cláusulas obrigatórias (SELECT e FROM) e depois as opcionais (WHERE, GROUP BY, HAVING, ORDER BY). Verifique se a função de agregação está acompanhada de GROUP BY e se o ORDER BY usa posição ou nome.

Gabarito: letra B

Link permanente: /questoes/fg165281