Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fc039514
Banca
FCC
Órgão
TRT - 11ª Região (AM e RR)
Ano
2017
Nível
Médio
Cargo
Técnico Judiciário - Tecnologia da Informação
Considere que no TRT exista, em um banco de dados, a tabela TRAB que possui como campos: nome, sexo, salario de vários trabalhadores. Um Técnico foi solicitado a escrever um comando SQL para obter a média salarial dos trabalhadores do sexo FEMININO. O comando correto é:
  1. ASELECT sexo, AVG(salario) as MediaSalarial FROM TRAB GROUP BY sexo;
  2. BSELECT AVG(salario) FROM TRAB WHERE sexo=’FEMININO’;
  3. CSELECT sexo, AVG(salario) FROM TRAB GROUP BY sexo="FEMININO";
  4. DSELECT * FROM TRAB WHERE sexo='FEMININO' as AVG(salario);
  5. ESELECT sexo="FEMININO" FROM TRAB WHERE AVG(salario);
Revelar gabarito e comentário

GabaritoB — SELECT AVG(salario) FROM TRAB WHERE sexo=’FEMININO’;

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ção de Agregação AVG e Cláusula WHERE

Gabarito: letra B. Para obter a média salarial apenas dos trabalhadores do sexo FEMININO, o comando deve filtrar os registros com WHERE e aplicar a função AVG sobre a coluna salario. A sintaxe correta é SELECT AVG(coluna) FROM tabela WHERE condição, conforme descrito na documentação do SQL.

A banca testa o conhecimento da função de agregação AVG e a necessidade da cláusula WHERE para restringir o grupo calculado. Vamos analisar cada alternativa:

Alternativa A — ❌ Incorreta

SELECT sexo, AVG(salario) as MediaSalarial FROM TRAB GROUP BY sexo; Esta consulta calcula a média salarial para cada sexo (agrupando por sexo), retornando duas linhas (FEMININO e MASCULINO). A questão pede apenas a média dos trabalhadores do sexo FEMININO, não um agrupamento. Portanto, está incorreta.

Alternativa B — ✅ Correta ⟵ GABARITO

SELECT AVG(salario) FROM TRAB WHERE sexo='FEMININO'; Exatamente o que se pede: a função AVG calcula a média da coluna salario, e a cláusula WHERE restringe o cálculo apenas às linhas onde sexo é igual a 'FEMININO'. Sintaxe correta e sem redundâncias.

Alternativa C — ❌ Incorreta

SELECT sexo, AVG(salario) FROM TRAB GROUP BY sexo="FEMININO"; A cláusula GROUP BY não aceita uma condição de igualdade como argumento; espera-se uma lista de colunas. A condição deve ser aplicada com WHERE antes do GROUP BY. Além disso, mesmo que houvesse um WHERE, o GROUP BY feminino seria inadequado. Portanto, comando inválido.

Alternativa D — ❌ Incorreta

SELECT * FROM TRAB WHERE sexo='FEMININO' as AVG(salario); O alias as AVG(salario) está posicionado incorretamente. O alias é usado para renomear colunas no SELECT, não após a cláusula WHERE. Além disso, SELECT * retorna todas as colunas, não a média. Comando sintática e semanticamente errado.

Alternativa E — ❌ Incorreta

SELECT sexo="FEMININO" FROM TRAB WHERE AVG(salario); Aqui, sexo="FEMININO" no SELECT retorna um valor booleano (1 ou 0), não a média. E a cláusula WHERE AVG(salario) é inválida, pois funções de agregação não podem ser usadas diretamente no WHERE sem um GROUP BY. Comando absurdamente incorreto.

NÃO CAIA NESSA!

Lembre-se da ordem de execução do SQL: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Funções de agregação (AVG, SUM, COUNT, etc.) atuam sobre grupos; quando não há GROUP BY, elas agem sobre todas as linhas que atendem ao WHERE. Para filtrar grupos, use HAVING. A principal pegadinha desta questão é confundir a necessidade de GROUP BY com a filtragem simples por WHERE.

Gabarito: letra B.

Link permanente: /questoes/fc039514