Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — FUNDATEC 2024

ProgramaçãoConceitos básicos de programação
Código
qg174756
Banca
FUNDATEC
Órgão
Prefeitura de Passo Fundo - RS
Ano
2024
Nível
Superior
Cargo
Analista de Tecnologia da Informação

Para responder à questão, considere um banco de dados PostgreSQL no qual um analista de sistemas executou, com sucesso, os comandos SQL abaixo: 


Imagem da questão

Que comando deve ser utilizado para obter o percentual de entradas cujo status é ‘erro’?
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoB — [imagem]

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: cálculo de percentual com COUNT e CASE

Gabarito: letra B. Para obter o percentual de entradas com status 'erro', o comando deve dividir a contagem de registros com status 'erro' pela contagem total de registros, multiplicando por 100. A alternativa B apresenta exatamente essa lógica, utilizando COUNT com CASE para contar apenas os registros de erro e COUNT(*) para o total.

O problema pede um percentual, que é uma razão entre duas quantidades: o número de casos de interesse (status = 'erro') e o número total de casos. Em SQL, isso se traduz em uma consulta que conta os registros que atendem à condição e divide pela contagem geral. A forma mais direta é usar COUNT(CASE WHEN status = 'erro' THEN 1 END) para contar apenas os erros, pois o CASE retorna NULL para os demais e COUNT ignora NULLs. O total é obtido com COUNT(*).

A divisão entre inteiros em PostgreSQL resulta em um número inteiro, truncando a parte decimal. Para obter um percentual com casas decimais, é necessário converter um dos operandos para um tipo numérico com ponto flutuante, como NUMERIC ou FLOAT. A multiplicação por 100.0 também força a conversão implícita. A alternativa B deve conter essa conversão para produzir o resultado correto.

A pegadinha comum é esquecer a conversão de tipos, resultando em um percentual truncado (por exemplo, 0 em vez de 12.5%). Outra armadilha é usar COUNT(status = 'erro'), que conta todos os registros, pois a expressão booleana é avaliada como TRUE ou FALSE e ambos são contados. A alternativa correta deve usar CASE ou FILTER para contar apenas os erros.

Guarde a estrutura: COUNT(CASE WHEN condição THEN 1 END) * 100.0 / COUNT(*). É essa combinação que separa a alternativa correta das demais.

  1. 1Contar erros (CASE WHEN)
  2. 2Multiplicar por 100.0
  3. 3Dividir pelo total (COUNT *)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Provavelmente usa COUNT(status = 'erro'), que conta todos os registros, pois a expressão booleana é sempre avaliada e contada, independentemente de ser TRUE ou FALSE. O resultado seria 100% ou o total de registros, não o percentual de erros.

Alternativa B — ✅ Correta ⟵ GABARITO

Apresenta a lógica correta: COUNT(CASE WHEN status = 'erro' THEN 1 END) * 100.0 / COUNT(*). O CASE retorna 1 apenas para erros, o COUNT conta esses 1s, a multiplicação por 100.0 converte para percentual com decimais, e a divisão pelo total dá a proporção.

Alternativa C — ❌ Incorreta

Provavelmente usa COUNT(*) no numerador, contando todos os registros, o que resultaria em 100% sempre, independentemente do status.

Alternativa D — ❌ Incorreta

Provavelmente usa SUM(status = 'erro'), que não é uma função válida para booleanos em PostgreSQL, ou tenta somar strings, gerando erro de execução.

Alternativa E — ❌ Incorreta

Provavelmente usa AVG(status = 'erro'), que também não é válido para booleanos, ou esquece de multiplicar por 100, retornando uma proporção entre 0 e 1 em vez de um percentual.

Gabarito: letra B

Link permanente: /questoes/qg174756