Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
qa537512
Banca
FUNDATEC
Órgão
BRDE
Ano
2023
Cargo
Ana Sist ( )

Analise o trecho de código a seguir, escrito em SQL:

 

Imagem associada para resolução da questão

 

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

Consultas SQL: GROUP BY e HAVING

Gabarito: letra B. A cláusula HAVING é usada para filtrar os grupos formados pelo GROUP BY, aplicando uma condição sobre o resultado das funções de agregação. Na linha 5 do código, a condição HAVING SUM(valor) > 30000 seleciona apenas os grupos cuja soma dos valores seja maior que 30.000. Essa é a função da cláusula HAVING, que atua após o agrupamento, diferentemente do WHERE, que filtra linhas antes do agrupamento.

A consulta SQL apresentada no enunciado utiliza as cláusulas SELECT, FROM, GROUP BY e HAVING. Para entender a questão, é essencial compreender a ordem lógica de execução dessas cláusulas em uma consulta SQL. O banco de dados não executa as cláusulas na ordem em que são escritas, mas sim em uma sequência lógica: primeiro, as linhas são filtradas pela cláusula WHERE (se houver); em seguida, as linhas resultantes são agrupadas pela cláusula GROUP BY; depois, as funções de agregação (como SUM, COUNT, MAX, MIN, AVG) são aplicadas a cada grupo; e, por fim, a cláusula HAVING filtra os grupos com base no resultado dessas agregações. A cláusula ORDER BY é a última a ser executada, ordenando o resultado final.

A cláusula GROUP BY é utilizada para agrupar linhas que possuem os mesmos valores em uma ou mais colunas especificadas. Por exemplo, se tivermos uma tabela de faturas com uma coluna cod_conveniada, o comando GROUP BY cod_conveniada agrupará todas as faturas de cada convênio em um único grupo. As funções de agregação, então, são aplicadas a cada grupo, resumindo os dados. A cláusula HAVING é um filtro que atua sobre os grupos, permitindo selecionar apenas aqueles que atendem a uma condição sobre o valor agregado. É importante notar que HAVING não pode ser usado sem GROUP BY (embora alguns bancos permitam, o comportamento é como se houvesse um único grupo), e que a condição em HAVING pode referenciar colunas agregadas ou colunas do GROUP BY.

A pegadinha clássica dessa questão é confundir HAVING com WHERE. O WHERE filtra linhas individuais antes do agrupamento, enquanto o HAVING filtra grupos após o agrupamento. Por exemplo, se quiséssemos apenas as faturas com valor maior que 30000, usaríamos WHERE valor > 30000. Mas se quiséssemos apenas os convênios cuja soma dos valores das faturas seja maior que 30000, usaríamos HAVING SUM(valor) > 30000. A alternativa B descreve exatamente essa segunda situação, referindo-se à linha 5, que contém a cláusula HAVING.

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

  1. 1WHERE (filtra linhas)
  2. 2GROUP BY (agrupa)
  3. 3Funções de agregação
  4. 4HAVING (filtra grupos)
  5. 5ORDER BY (ordena)
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á na linha 4. A linha 5 contém a cláusula HAVING, que é um filtro sobre os grupos, não o agrupamento em si. A alternativa confunde a função 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 HAVING SUM(valor) > 30000 seleciona apenas os grupos cuja soma dos valores seja maior que 30.000. Portanto, a afirmação de que "na linha 5, são selecionadas as linhas cujo resultado do agrupamento deve ser maior do que 30000" está correta, pois HAVING atua sobre o resultado do agrupamento.

Alternativa C — ❌ Incorreta

Afirma que o resultado da consulta é ordenado pela coluna cod_conveniada. Não há cláusula ORDER BY no código apresentado. A ordenação é feita pela cláusula ORDER BY, que não está presente na consulta. A alternativa inventa uma cláusula que não existe no código.

Alternativa D — ❌ Incorreta

Afirma que participam do agrupamento todas as faturas com vencimento no dia da execução da consulta. Não há nenhuma condição na cláusula WHERE que filtre por data de vencimento. O agrupamento é feito sobre todas as linhas da tabela que atendem às condições do WHERE (que, no código, não existe ou não filtra por data). A alternativa introduz uma condição que não está 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 retorna a soma dos valores (SUM) agrupada por cod_conveniada, não a quantidade (COUNT) nem o valor máximo (MAX). A alternativa troca as funções de agregação utilizadas na consulta.

Gabarito: letra B

Link permanente: /questoes/qa537512