Pular para o conteúdo principal

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

Banco de DadosConsultas e Comandos em SQL
Código
qa630762
Banca
FUNDATEC
Órgão
Pref Cruz Alta
Ano
2024
Cargo
Tec ( )

Com base nos Dados Abertos do governo do estado (dados.rs.gov.br), referente ao tema agricultura, foi possível criar a tabela “historico_producao” em um banco de dados relacional, conforme abaixo:

Municipio

ProdutoAno

Qnt_produzida_toneladas

Arroio do Tigre

Goiaba2021

22

Cotiporã

Goiaba

2021

8

Dom Feliciano

Goiaba2021

11

Arroio do Tigre

Laranja2021

600

Charqueadas

Laranja2021

100

Cotiporã

Laranja2021

938

Dom Feliciano

Laranja2021

720

Estrela Velha

Laranja2021

319

Fortaleza dos Valos

Laranja2021

285

Arroio do Tigre

Banana2021

64

Cotiporã

Banana2021

60

Dom Feliciano

Banana2020

12

Acerca das informações presentes na tabela acima, assinale a alternativa que contém a consulta SQL correta, considerando que o objetivo da query é listar somente os municípios que tiveram uma produção maior do que 500 toneladas de frutas no ano de 2021. 

  1. ASelect Municipio, sum(Qnt_produzida_toneladas)  From historico_producao  When Ano = 2021  group by Municipio  having sum(Qnt_produzida_toneladas) > 500
  2. BList Municipio, sum(Qnt_produzida_toneladas) > 500  From historico_producao  What Ano = 2021  group by Municipio
  3. CSelect Municipio, sum(Qnt_produzida_toneladas)  From historico_producao  Where Ano = 2021  group by Municipio  having sum(Qnt_produzida_toneladas) > 500
  4. DSelect Municipio, sum(Qnt_produzida_toneladas) From historico_producao  What Ano = 2021  And Qnt_produzida_toneladas > 500  group by Municipio
  5. ESelect Municipio, sum(Qnt_produzida_toneladas)  From historico_producao  order By Qnt_produzida_toneladas > 500
Revelar gabarito e comentário

GabaritoC — Select Municipio, sum(Qnt_produzida_toneladas)  From historico_producao  Where Ano = 2021  group by Municipio  having sum(Qnt_produzida_toneladas) > 500

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: agrupamento e filtro com HAVING

Gabarito: letra C. A consulta correta usa SELECT com SUM, FROM, WHERE para filtrar o ano, GROUP BY para agrupar por município e HAVING para filtrar os grupos com soma superior a 500 toneladas — exatamente a estrutura da alternativa C.

A ideia por trás

A questão testa o domínio da ordem lógica de execução das cláusulas SQL e a diferença entre filtrar linhas e filtrar grupos. Quando o objetivo é somar a produção de cada município e depois manter apenas os municípios cuja soma ultrapassa 500 toneladas, precisamos de duas etapas de filtragem:

  1. Filtrar as linhas que interessam (ano de 2021) — isso é feito com WHERE.

  2. Agrupar as linhas por município — GROUP BY Municipio.

  3. Calcular a soma da produção para cada grupo — SUM(Qnt_produzida_toneladas).

  4. Filtrar os grupos cuja soma é maior que 500 — isso é feito com HAVING.

O HAVING é a cláusula que permite filtrar o resultado de uma função de agregação (como SUM, COUNT, AVG). O WHERE não pode ser usado para filtrar agregados, pois ele é aplicado antes do agrupamento, sobre as linhas individuais.

Vamos aplicar isso aos dados da tabela. Para o ano de 2021, as produções por município são:

  • Arroio do Tigre: Goiaba (22) + Laranja (600) + Banana (64) = 686 toneladas

  • Cotiporã: Goiaba (8) + Laranja (938) + Banana (60) = 1006 toneladas

  • Dom Feliciano: Goiaba (11) + Laranja (720) = 731 toneladas (a Banana é de 2020, então fica de fora)

  • Charqueadas: Laranja (100) = 100 toneladas

  • Estrela Velha: Laranja (319) = 319 toneladas

  • Fortaleza dos Valos: Laranja (285) = 285 toneladas

Com o filtro HAVING SUM(...) > 500, o resultado traria apenas Arroio do Tigre, Cotiporã e Dom Feliciano.

A ordem de escrita no SQL é SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY, mas a ordem de execução é diferente: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. É por isso que o HAVING consegue filtrar o resultado do SUM, que é calculado no SELECT.

A pegadinha da banca está em trocar WHERE por WHEN ou WHAT (palavras que não existem no SQL) e em usar HAVING sem GROUP BY ou WHERE sem agregação. A alternativa D, por exemplo, tenta filtrar a quantidade diretamente no WHERE, o que descartaria as linhas individuais antes da soma — o que não atende ao objetivo de somar tudo e depois filtrar.

Guarde a fronteira: WHERE filtra linhas, HAVING filtra grupos. É exatamente nessa distinção que as alternativas se dividem.

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

Alternativa A — ❌ Incorreta

Usa When Ano = 2021WHEN não é uma cláusula SQL válida para filtrar linhas; o correto é WHERE. A estrutura de agrupamento e HAVING está certa, mas o erro na palavra-chave invalida a consulta.

Alternativa B — ❌ Incorreta

Começa com List (não existe em SQL, o correto é SELECT) e usa What no lugar de WHERE. Além disso, não há HAVING para filtrar o resultado da soma — a condição > 500 está solta na projeção, o que é sintaticamente inválido.

Alternativa C — ✅ Correta ⟵ GABARITO

Apresenta a estrutura completa e correta: SELECT com SUM, FROM com a tabela, WHERE filtrando o ano de 2021, GROUP BY agrupando por município e HAVING filtrando os grupos com soma superior a 500 toneladas. É a única que atende ao objetivo da query.

Alternativa D — ❌ Incorreta

Usa What no lugar de WHERE (erro sintático) e aplica o filtro Qnt_produzida_toneladas > 500 no WHERE, ou seja, antes da soma. Isso descartaria as linhas individuais com produção menor que 500, e a soma por município ficaria incorreta — por exemplo, Arroio do Tigre teria apenas a Laranja (600) somada, ignorando Goiaba e Banana.

Alternativa E — ❌ Incorreta

Usa order By sem GROUP BY e sem HAVING. A condição Qnt_produzida_toneladas > 500 está na cláusula ORDER BY, que serve apenas para ordenar, não para filtrar. A consulta não agrupa nem soma, então não atende ao objetivo.

Gabarito: letra C

Link permanente: /questoes/qa630762