Questão de Programação — Conceitos básicos de programação — FUNDATEC 2024
Programação›Conceitos 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:
Que comando deve ser utilizado para obter o percentual de entradas cujo status é ‘erro’?
A
B
C
D
E
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.
1Contar erros (CASE WHEN)
2Multiplicar por 100.0
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.