Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FUNDATEC 2023

Banco de DadosSQL
Código
qq890148
Banca
FUNDATEC
Órgão
BRDE
Ano
2023
Nível
Superior
Cargo
Analista de Sistemas - Ciência de Dados
Analise o trecho de código a seguir, escrito em SQL:32.png 522×98Com base nesse código, é correto afirmar que:
  1. AO agrupamento ocorre nas linhas 4-5.
  2. BNa linha 5, são selecionadas as linhas cujo resultado do agrupamento deve ser maior do que 30000.
  3. CO resultado da consulta é ordenado pela coluna cod_conveniada.
  4. DParticipam do agrupamento todas as faturas com vencimento no dia da execução da consulta.
  5. EA consulta retorna a quantidade de faturas cadastradas e o valor da maior fatura para cada conveniada.
Revelar gabarito e comentário

GabaritoB — Na linha 5, são selecionadas as linhas cujo resultado do agrupamento deve ser maior do que 30000.

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áusulas GROUP BY e HAVING em SQL

Gabarito: letra B. A alternativa B está correta porque a cláusula HAVING, presente na linha 5 do código, filtra os grupos formados pelo GROUP BY, selecionando apenas aqueles cujo resultado da agregação (no caso, a soma dos valores) seja maior que 30000. As demais alternativas apresentam erros conceituais sobre o funcionamento dessas cláusulas e de outras partes da consulta.

A consulta SQL apresentada utiliza duas cláusulas fundamentais para agregação de dados: GROUP BY e HAVING. O GROUP BY é responsável por agrupar linhas que possuem valores iguais em uma ou mais colunas especificadas, permitindo que funções de agregação como SUM, COUNT, AVG, MAX e MIN sejam aplicadas a cada grupo. Já a cláusula HAVING atua como um filtro sobre os grupos formados, ou seja, ela é aplicada após o agrupamento e a agregação, selecionando apenas os grupos que atendem a uma condição específica. Essa é a principal diferença entre HAVING e WHERE: o WHERE filtra linhas individuais antes do agrupamento, enquanto o HAVING filtra grupos depois da agregação.

Para entender melhor, considere um exemplo prático. Suponha uma tabela de faturas com as colunas cod_conveniada, valor e vencimento. A consulta SELECT cod_conveniada, SUM(valor) FROM faturas GROUP BY cod_conveniada HAVING SUM(valor) > 30000 agrupa as faturas por convênio, calcula a soma dos valores de cada grupo e, em seguida, descarta os grupos cuja soma seja menor ou igual a 30000. O resultado final mostra apenas os convênios cuja soma total de faturas ultrapassa esse valor. A ordem de execução lógica das cláusulas é: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Isso significa que o HAVING só pode usar colunas que estejam no GROUP BY ou funções de agregação, pois as linhas individuais já foram agrupadas.

A pegadinha clássica dessa questão é confundir o papel do HAVING com o do WHERE. O WHERE filtraria as faturas individualmente antes do agrupamento, enquanto o HAVING filtra os grupos resultantes. Além disso, é comum errar ao afirmar que o agrupamento ocorre na linha do HAVING, quando na verdade ele ocorre na linha do GROUP BY. A banca explora exatamente essa confusão entre as cláusulas e suas posições no código.

Guarde a distinção entre WHERE (filtro de linhas) e HAVING (filtro de grupos): é nela que as alternativas se dividem.

  1. 1FROM
  2. 2WHERE (filtra linhas)
  3. 3GROUP BY (agrupa)
  4. 4HAVING (filtra grupos)
  5. 5SELECT
  6. 6ORDER BY
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que o agrupamento ocorre nas linhas 4-5. O agrupamento é feito pela cláusula GROUP BY, que está apenas na linha 4. A linha 5 contém a cláusula HAVING, que é um filtro aplicado após o agrupamento, não o agrupamento em si. A alternativa confunde o papel das duas cláusulas.

Alternativa B — ✅ Correta ⟵ GABARITO

A linha 5 contém a cláusula HAVING, que filtra os grupos formados pelo GROUP BY. A condição SUM(valor) > 30000 seleciona apenas os grupos cuja soma dos valores seja maior que 30000. Isso está exatamente de acordo com o que a alternativa afirma: são selecionadas as linhas (grupos) cujo resultado do agrupamento deve ser maior que 30000.

Alternativa C — ❌ Incorreta

Afirma que o resultado é ordenado pela coluna cod_conveniada. Não há cláusula ORDER BY na consulta apresentada. A ordenação, se existisse, seria feita por essa cláusula, mas ela não está presente no código. A alternativa inventa uma cláusula que não existe.

Alternativa D — ❌ Incorreta

Afirma que participam do agrupamento todas as faturas com vencimento no dia da execução da consulta. Não há cláusula WHERE na consulta, portanto nenhum filtro é aplicado às linhas antes do agrupamento. Todas as faturas da tabela participam do agrupamento, independentemente da data de vencimento. A alternativa introduz uma condição que não existe no código.

Alternativa E — ❌ Incorreta

Afirma que a consulta retorna a quantidade de faturas cadastradas e o valor da maior fatura para cada conveniada. A consulta utiliza a função de agregação SUM, que calcula a soma dos valores, e não COUNT (quantidade) nem MAX (maior valor). Além disso, a consulta retorna a soma dos valores, não a quantidade ou o maior valor. A alternativa descreve funções de agregação diferentes das utilizadas no código.

Gabarito: letra B

Link permanente: /questoes/qq890148