Professor EBTT - Informática: Engenharia de Software e Banco de Dados
Considere o seguinte comando SQL executado em um banco de dados:SELECT COUNT(ID), AVG(Valor), TipoFROM TransacoesWHERE CAST(Valor AS VARCHAR) LIKE '1%'GROUP BY TipoHAVING COUNT(ID) > 10;Assinale a alternativa que apresenta a correta descrição do resultado produzido pela execução desse comando.
ARetorna a quantidade de transações, a média dos valores e o tipo, agrupados por tipo, exibindo exclusivamente os grupos com mais de 10 registros cujos valores representem o cálculo aproximado de 1%.
BRetorna a quantidade de transações, a média dos valores e o tipo, restringindo a saída aos grupos em que o valor médio calculado seja superior a 10 e cujo registro inicie obrigatoriamente com o dígito '1'.
CRetorna a quantidade de transações, a média dos valores e o tipo, apresentando apenas os grupos em que a quantidade de valores que contêm o número '1' em qualquer posição seja maior que 10.
DRetorna a quantidade de transações, a média dos valores e o tipo, agrupados por tipo, exibindo exclusivamente os grupos que contêm mais de 10 registros nos quais o valor inicie com o dígito '1'.
ERetorna a quantidade de transações, a média dos valores e o tipo, exibindo os registros agrupados que possuem um identificador (ID) estritamente maior que 10 e cujo valor termine com o dígito '1'.
Revelar gabarito e comentário▾
GabaritoD — Retorna a quantidade de transações, a média dos valores e o tipo, agrupados por tipo, exibindo exclusivamente os grupos que contêm mais de 10 registros nos quais o valor inicie com o dígito '1'.
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”.
Comando SQL com GROUP BY, HAVING e LIKE
Gabarito: letra D. O comando primeiro filtra as linhas da tabela Transacoes cujo valor convertido para string começa com o dígito '1' (WHERE CAST(Valor AS VARCHAR) LIKE '1%'), depois agrupa por Tipo, conta os IDs de cada grupo e mantém apenas os grupos com mais de 10 registros (HAVING COUNT(ID) > 10). Por fim, seleciona a contagem, a média dos valores e o Tipo. A alternativa D descreve corretamente: "agrupados por tipo, exibindo exclusivamente os grupos que contêm mais de 10 registros nos quais o valor inicie com o dígito '1'".
A ordem de processamento de um comando SQL com essas cláusulas é:
FROM – tabela de origem;
WHERE – filtra linhas antes do agrupamento;
GROUP BY – agrupa as linhas restantes;
HAVING – filtra grupos após a agregação;
SELECT – projeta as colunas solicitadas.
No caso, o WHERE (LIKE '1%') elimina todas as linhas cujo valor não inicia com '1'. Em seguida, o GROUP BY Tipo cria grupos. O HAVING COUNT(ID) > 10 descarta grupos com 10 ou menos registros. O resultado final mostra, para cada grupo aprovado, COUNT(ID), AVG(Valor) e o Tipo.
flowchart TD
A[FROM Transacoes] --> B[WHERE CAST(Valor AS VARCHAR) LIKE '1%']
B --> C[GROUP BY Tipo]
C --> D[HAVING COUNT(ID) > 10]
D --> E[SELECT COUNT(ID), AVG(Valor), Tipo]
Critério
Alternativa A
Alternativa B
Alternativa C
Alternativa D (Gabarito)
Alternativa E
Filtro WHERE (LIKE '1%')
❌ Interpreta como "cálculo aproximado de 1%"
❌ Não menciona corretamente
❌ "Contém '1' em qualquer posição" (deveria ser "inicia com '1'")
✅ "Valor inicie com o dígito '1'"
❌ "Valor termine com o dígito '1'"
Condição HAVING
❌ Não especifica COUNT(ID) > 10
❌ "Valor médio superior a 10" (troca COUNT por AVG)
✅ "Quantidade de valores > 10" (correto, mas com erro no LIKE)
✅ "Mais de 10 registros"
❌ "ID estritamente maior que 10" (troca COUNT por ID)
Agrupamento
✅ "Agrupados por tipo"
✅ "Agrupados por tipo"
✅ "Agrupados por tipo"
✅ "Agrupados por tipo"
❌ "Registros agrupados" (impreciso)
Descrição geral correta
❌
❌
❌
✅
❌
Alternativa A — ❌ Incorreta
Afirma que os valores representam "o cálculo aproximado de 1%". Isso é um erro: o filtro LIKE '1%' seleciona valores que iniciam com o dígito 1, não uma aproximação percentual. A descrição não corresponde à semântica do comando.
Alternativa B — ❌ Incorreta
Diz que a condição HAVING é sobre "valor médio calculado seja superior a 10" (AVG(Valor) > 10). Na verdade, o HAVING usa COUNT(ID) > 10, ou seja, número de registros por grupo maior que 10. Troca o conceito entre média e contagem.
Alternativa C — ❌ Incorreta
Afirma que o LIKE seleciona "valores que contêm o número '1' em qualquer posição". O padrão '1%' busca strings que começam com '1', enquanto '%1%' buscaria qualquer posição. Há uma troca sutil de padrão.
Alternativa D — ✅ Correta ⟵ GABARITO
Descreve exatamente o que o comando faz: agrupa por tipo, exibe apenas os grupos com mais de 10 registros cujos valores (após filtro) iniciam com o dígito '1'. Inclui a contagem e a média. Correta.
Alternativa E — ❌ Incorreta
Afirma que HAVING é sobre "identificador (ID) estritamente maior que 10" e que o valor termina com '1'. HAVING COUNT(ID) > 10 é uma condição sobre a contagem de IDs, não sobre o próprio ID. Além disso, o LIKE é '1%' (início) e não '%1' (término). Duplo erro.
NÃO CAIA NESSA!
A banca explora duas trocas comuns: (1) confundir '1%' (inicia com '1') com '%1%' (contém '1') ou '%1' (termina com '1'); (2) trocar a condição do HAVING – que é sobre a agregação COUNT(ID) – por uma condição sobre AVG(Valor) ou sobre o próprio ID. Fique atento: o HAVING sempre atua sobre o resultado de funções de agregação do GROUP BY.
PEGA ESSA DICA!
Para resolver questões de SQL com GROUP BY e HAVING, lembre-se do fluxo: WHERE → GROUP BY → HAVING → SELECT. O WHERE filtra linhas antes de agrupar; o HAVING filtra grupos depois de agrupar. O operador LIKE com % no final ('1%') busca apenas inícios; com % no início ('%1') busca finais; com % dos dois lados ('%1%') busca qualquer ocorrência.