Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2023
Banco de Dados›Consultas 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:
Com base nesse código, é correto afirmar que:
AO agrupamento ocorre nas linhas 4-5.
BNa linha 5, são selecionadas as linhas cujo resultado do agrupamento deve ser maior do que 30000.
CO resultado da consulta é ordenado pela coluna cod_conveniada.
DParticipam do agrupamento todas as faturas com vencimento no dia da execução da consulta.
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.
1WHERE (filtra linhas)
2GROUP BY (agrupa)
3Funções de agregação
4HAVING (filtra grupos)
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.