Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FCC 2016

Banco de DadosSQL
Código
fc035087
Banca
FCC
Órgão
Prefeitura de Teresina - PI
Ano
2016
Nível
Médio
Considere hipoteticamente que a Prefeitura de Teresina autorizou obras necessárias em seus diversos órgãos. Para manter o registro das obras em cada órgão, foi criado um banco de dados com duas tabelas: orgao e obra. Cada órgão pode autorizar várias obras, porém, cada obra só pode ser autorizada por um único órgão.Os dados cadastrados nas tabelas orgao e obra, respectivamente, são:SiglaOrgao NomeOrgaoPRODATER EMPRESA TERESINENSE DE PROCESSAMENTO DE DADOSSEMAE SERVIÇO MUNICIPAL DE ÁGUAS E ESGOTOS DE TERESINASEMDUH SECRETARIA DE DESENVOLVIMENTO URBANOSEMEC SECRETARIA MUNICIPAL DE EDUCAÇÃOIdObra SiglaOrgao DescricaoObra ValorObra1 SEMAE Estação de tratamento de água 1000002 SEMAE Estação de tratamento de esgotos 8000003 PRODATER Reforma do Data Center 2000004 SEMDUH Construção de moradias populares 20000005 SEMDUH Correção de buracos no asfalto 5000006 SEMEC Construção de escola 1000000Considere que a chave primária da tabela orgao é SiglaOrgao e da tabela obra é IdObraAo ser executado um comando SQL foram exibidos os seguintes dados:Órgão TotalPRODATER 200000SEMAE 900000SEMDUH 2500000SEMEC 1000000Pode-se concluir, corretamente, que o comando executado foi
  1. ASELECT SiglaOrgao as Órgão, AVG(ValorObra) as Total from obra GROUP BY SiglaOrgao;
  2. BSELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra GROUP BY SiglaOrgao;
  3. CSELECT SiglaOrgao as "Órgão", COUNT(ValorObra) as "Total" from obra GROUP BY SiglaOrgao;
  4. DSELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra ORDER BY SiglaOrgao;
  5. ESELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra;
Revelar gabarito e comentário

GabaritoB — SELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra GROUP BY SiglaOrgao;

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

SQL: Funções de Agregação e GROUP BY

Gabarito: letra B. O comando que produz a saída apresentada é SELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra GROUP BY SiglaOrgao;, pois os totais (PRODATER 200000, SEMAE 900000, SEMDUH 2500000, SEMEC 1000000) correspondem exatamente à soma dos valores das obras por órgão.

A questão testa a compreensão de funções de agregação e da cláusula GROUP BY. Com os dados fornecidos, é possível calcular mentalmente os totais por órgão e verificar qual comando os reproduz.

Alternativa A — ❌ Incorreta

SELECT SiglaOrgao as Órgão, AVG(ValorObra) as Total from obra GROUP BY SiglaOrgao; calcularia a média dos valores, não a soma. Para os órgãos com mais de uma obra, os valores seriam diferentes (SEMAE: 450000, SEMDUH: 1250000), não coincidindo com a saída.

Alternativa B — ✅ Correta ⟵ GABARITO

SELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra GROUP BY SiglaOrgao; agrupa as obras por órgão e soma os valores, gerando exatamente os totais apresentados.

Alternativa C — ❌ Incorreta

SELECT SiglaOrgao as "Órgão", COUNT(ValorObra) as "Total" from obra GROUP BY SiglaOrgao; contaria o número de obras por órgão, não a soma. O resultado seria: PRODATER (1), SEMAE (2), SEMDUH (2), SEMEC (1), diferente do desejado.

Alternativa D — ❌ Incorreta

SELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra ORDER BY SiglaOrgao; falta a cláusula GROUP BY. Em SQL, ao usar uma função de agregação (SUM) com uma coluna não agregada no SELECT, é obrigatório o GROUP BY. Sem ele, o comando resultaria em erro na maioria dos SGBDs ou produziria uma única linha com a soma total, não agrupado por órgão.

Alternativa E — ❌ Incorreta

SELECT SiglaOrgao as Órgão, SUM(ValorObra) as Total from obra; também falta GROUP BY, incorrendo no mesmo problema da alternativa D: a consulta é inválida para retornar linhas por órgão.

PEGA ESSA DICA!

Em consultas com funções de agregação (SUM, AVG, COUNT, MAX, MIN), toda coluna não agregada no SELECT deve estar na cláusula GROUP BY. Sem ela, o SGBD não sabe como agrupar os registros e o comando falha ou retorna resultado incorreto.

Link permanente: /questoes/fc035087