Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Avança SP 2024

Banco de DadosSQL
Código
qg082357
Banca
Avança SP
Órgão
Prefeitura de Americana - SP
Ano
2024
Nível
Superior
Cargo
Analista Programador de Sistemas
Ainda sobre o esquema anterior, qual SQL correto retorna. Quantos intérpretes há por país?
  1. ASelect ALL nomeArtistico FROM pais.
  2. BSELECT COUNT(*) AS [Número de Intérpretes]FROM Interprete
  3. CSELECT país, COUNT(*) AS [Número de Intérpretes]FROM InterpreteGROUP BY país
  4. DSELECT COUNT(*)FROM NomeArtisticoGROUP BY país
  5. ESELECT país AS [Número de Intérpretes]FROM InterpreteGROUP BY país
Revelar gabarito e comentário

GabaritoC — SELECT país, COUNT(*) AS [Número de Intérpretes] FROM Interprete GROUP BY país

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: contagem agrupada com GROUP BY

Gabarito: letra C. Para responder "quantos intérpretes há por país", o SQL precisa (1) contar registros da tabela Interprete com a função de agregação COUNT(*) e (2) agrupar esse resultado por país com a cláusula GROUP BY país. A alternativa C é a única que combina exatamente esses dois elementos — a contagem e o agrupamento pela coluna correta.

A pergunta "quantos X há por Y" é o padrão clássico de consulta com agregação e agrupamento. A função COUNT(*) conta o número de linhas de um conjunto de resultados, e o GROUP BY divide esse conjunto em grupos — um para cada valor distinto da coluna indicada. Quando as duas coisas aparecem juntas, o COUNT(*) é calculado separadamente para cada grupo, produzindo exatamente a contagem por categoria. No caso, cada linha da tabela Interprete representa um intérprete, e o agrupamento por país faz o banco contar quantos intérpretes existem em cada país.

A ordem lógica de execução do SQL é importante para entender por que a alternativa C funciona: o banco primeiro lê a tabela (FROM), depois agrupa as linhas (GROUP BY) e só então calcula as funções de agregação (COUNT(*)) para cada grupo. É por isso que a coluna país pode aparecer no SELECT junto com a contagem — ela é a chave do agrupamento. Se a consulta tentasse selecionar uma coluna que não está no GROUP BY nem dentro de uma função de agregação, o banco retornaria erro, pois não saberia qual valor exibir para o grupo.

A pegadinha desta questão está em duas frentes. A primeira é a alternativa A, que usa SELECT ALL — um comando que não existe no SQL padrão (o correto seria SELECT * ou SELECT ALL coluna, mas mesmo assim não faria contagem). A segunda é a alternativa D, que conta a coluna errada (NomeArtistico em vez de Interprete) e ainda agrupa por país sem essa coluna existir na tabela NomeArtistico. A alternativa E faz o agrupamento, mas esquece a contagem — retorna apenas os países, sem o número de intérpretes. A alternativa B conta todos os intérpretes, mas sem agrupar por país, retornando um único total geral.

Guarde o critério decisivo: para responder "quantos por categoria", a consulta precisa ter uma função de agregação (COUNT, SUM, AVG, MIN, MAX) e a cláusula GROUP BY com a coluna da categoria. É exatamente essa combinação que separa a alternativa correta das demais.

  1. 1FROM Interprete
  2. 2GROUP BY país
  3. 3COUNT(*) por grupo
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

SELECT ALL nomeArtistico FROM pais — além de ALL não ser um comando válido nesse contexto (o correto seria SELECT * ou SELECT ALL nomeArtistico), a consulta não faz nenhuma contagem e não agrupa por país. Ela apenas listaria os valores da coluna nomeArtistico da tabela pais, o que não responde à pergunta.

Alternativa B — ❌ Incorreta

SELECT COUNT(*) AS [Número de Intérpretes] FROM Interprete — esta consulta conta corretamente o número total de intérpretes, mas sem agrupar por país. O resultado seria um único número (o total de intérpretes de todos os países), não a contagem por país. Falta a cláusula GROUP BY país.

Alternativa C — ✅ Correta ⟵ GABARITO

SELECT país, COUNT(*) AS [Número de Intérpretes] FROM Interprete GROUP BY país — esta é a consulta correta. Ela seleciona a coluna país, conta as linhas da tabela Interprete com COUNT(*) e agrupa o resultado por país com GROUP BY país. O resultado é uma linha para cada país, com o número de intérpretes correspondente.

Alternativa D — ❌ Incorreta

SELECT COUNT(*) FROM NomeArtistico GROUP BY país — dois erros: (1) a tabela consultada é NomeArtistico, mas a pergunta é sobre intérpretes (a tabela correta é Interprete); (2) a cláusula GROUP BY país referencia uma coluna país que não existe na tabela NomeArtistico, o que geraria erro de execução.

Alternativa E — ❌ Incorreta

SELECT país AS [Número de Intérpretes] FROM Interprete GROUP BY país — esta consulta agrupa corretamente por país, mas não faz nenhuma contagem. Ela apenas retornaria a lista de países distintos, sem o número de intérpretes de cada um. O alias [Número de Intérpretes] é enganoso, pois a coluna país não contém contagens.

NÃO CAIA NESSA!

A banca explora a confusão entre "contar" e "agrupar". As alternativas B e E fazem cada uma metade do trabalho — B conta sem agrupar, E agrupa sem contar. O candidato que reconhece que precisa das duas coisas juntas (COUNT + GROUP BY) acerta de imediato. Além disso, a alternativa D troca a tabela Interprete por NomeArtistico, testando se o candidato lê o enunciado com atenção.

PEGA ESSA DICA!

Para questões de "quantos por categoria", monte mentalmente o esqueleto da consulta: SELECT categoria, COUNT(*) FROM tabela GROUP BY categoria. Se a alternativa não tiver exatamente essa estrutura — com a função de agregação E o GROUP BY na coluna certa —, ela está errada. Treine identificando qual coluna é a "categoria" (o que varia) e qual é o "item contado" (cada linha da tabela).

Gabarito: letra C

Link permanente: /questoes/qg082357