Durante a implementação de um SGBD para uma aplicação de e-...
- Gabarito Comentado (1)
- Aulas (3)
- Comentários (2)
- Estatísticas
- Cadernos
- Criar anotações
- Notificar Erro
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a B.
Vamos entender o porquê:
Para resolver essa questão, é necessário compreender conceitos de SQL, em especial a utilização de cláusulas como JOIN, GROUP BY e HAVING, que são fundamentais para operações que envolvem agrupamento e filtragem de dados resultantes de múltiplas tabelas.
Alternativa B: SELECT nome FROM clientes JOIN compras ON clientes.id = compras.cliente_id GROUP BY nome HAVING COUNT(compras.id) > 3;
Essa opção é a correta porque:
- Usa o JOIN para combinar as tabelas clientes e compras através do cliente_id.
- Utiliza GROUP BY nome para agrupar os registros por cliente.
- Aplica HAVING COUNT(compras.id) > 3 para filtrar apenas os clientes que fizeram mais de três compras.
Vamos analisar por que as outras alternativas estão incorretas:
Alternativa A: SELECT nome FROM clientes WHERE compras > 3 AND data_compra >= '2023-01-01';
Está incorreta porque tenta filtrar diretamente na tabela clientes usando uma condição que não se aplica corretamente ao objetivo de contar compras, além de não utilizar GROUP BY ou JOIN.
Alternativa C: SELECT nome FROM clientes WHERE COUNT(compras) > 3;
Está errada porque o COUNT não pode ser usado diretamente no WHERE sem GROUP BY, e não está relacionada de forma correta ao contexto de contagem de registros em outra tabela.
Alternativa D: SELECT nome FROM compras GROUP BY cliente_id HAVING COUNT(id) > 3;
Embora use GROUP BY e HAVING, está incorreta por não retornar diretamente o nome do cliente, mas sim uma contagem baseada na tabela compras sem fazer a ligação necessária com a tabela clientes.
Esses conhecimentos de SQL são fundamentais para manipular dados de maneira eficiente e extrair informações relevantes de um banco de dados relacional.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Essa não faz sentido, a B não possui um filtro com o período, ele iria pegar todos os clientes que fizeram compra, se o horizonte do BD for de 4 anos, vai pegar um ano a mais.
Segundo chat GPT :
Letra B, mas eu concordo com o Iago.
Explicação:
- A consulta realiza um JOIN entre as tabelas e , com base no para relacionar as duas.
- O agrupamento (GROUP BY) é feito pelo nome do cliente, para contar as compras relacionadas a cada cliente.
- A cláusula HAVING filtra os resultados para mostrar apenas aqueles clientes que têm mais de 3 compras (COUNT(compras.id) > 3).
Outras alternativas:
- A: Incorreta, pois o campo não contém o número de compras diretamente e não realiza o agrupamento necessário.
- C: Incorreta, pois a função de agregação COUNT não pode ser usada diretamente na cláusula WHERE.
- D: Incorreta, pois seleciona apenas o e não relaciona essa informação com os nomes dos clientes na tabela .
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo