Durante a implementação de um SGBD para uma aplicação de e-...

Próximas questões
Com base no mesmo assunto
Q3035481 Banco de Dados
Durante a implementação de um SGBD para uma aplicação de e-commerce, um desenvolvedor precisa extrair todos os nomes de clientes que fizeram mais de três compras no último ano. Qual dos seguintes comandos SQL ele deve usar?
Alternativas

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