1
resposta

[Projeto] Desafio: Como fiz a análise e correção dos preços

Segue a minha linha de análise e resolução com base em outros comentários aqui do fórum, com alguns ajustes. Optei por utilizar os valores randômicos para garantir maior consistência nos dados.

-- ------------------------------------------------------
-- Etapa 1: Exploração dos dados
-- ------------------------------------------------------

SELECT nome_produto, COUNT(nome_produto) AS Qtd FROM produtos
GROUP BY nome_produto;

SELECT nome_produto, COUNT(nome_produto) AS Qtd,
CASE
    WHEN nome_produto = 'Bola de Futebol' AND preco NOT BETWEEN 20 AND 100 then 'Fora'
    WHEN nome_produto = 'Chocolate' AND preco NOT BETWEEN 10 AND 50 then 'Fora'
    WHEN nome_produto = 'Celular' AND preco NOT BETWEEN 80 AND 5000 then 'Fora'
    WHEN nome_produto = 'Livro de Ficção' AND preco NOT BETWEEN 10 AND 200 then 'Fora'
    WHEN nome_produto = 'Camisa' AND preco NOT BETWEEN 80 AND 200 then 'Fora'
    ELSE 'Ok'
END AS CategoriaPreco
from produtos
GROUP BY nome_produto, CategoriaPreco;

-- ------------------------------------------------------
-- Etapa 2: Atualização dos registros que estão fora dos limites
-- ------------------------------------------------------

SELECT * FROM produtos
WHERE nome_produto = 'Bola de Futebol' AND preco NOT BETWEEN 20 AND 100

UPDATE produtos
set preco = ABS(RANDOM()) % 81 + 20
WHERE nome_produto = 'Bola de Futebol' AND preco NOT BETWEEN 20 AND 100;

SELECT * FROM produtos
WHERE nome_produto = 'Chocolate' AND preco NOT BETWEEN 10 AND 50;

UPDATE produtos
set preco = ABS(RANDOM()) % 41 + 10
WHERE nome_produto = 'Chocolate' AND preco NOT BETWEEN 10 AND 50;

SELECT * FROM produtos
WHERE nome_produto = 'Celular' AND preco NOT BETWEEN 80 AND 5000;

UPDATE produtos
set preco = ABS(RANDOM()) % 4921 + 80
WHERE nome_produto = 'Celular' AND preco NOT BETWEEN 80 AND 5000;

SELECT * FROM produtos
WHERE nome_produto = 'Livro de Ficção' AND preco NOT BETWEEN 10 AND 200;

UPDATE produtos
set preco = ABS(RANDOM()) % 191 + 10
WHERE nome_produto = 'Livro de Ficção' AND preco NOT BETWEEN 10 AND 200;

SELECT * FROM produtos
WHERE nome_produto = 'Camisa' AND preco NOT BETWEEN 80 AND 200;

UPDATE produtos
set preco = ABS(RANDOM()) % 121 + 80
WHERE nome_produto = 'Camisa' AND preco NOT BETWEEN 80 AND 200;

-- ------------------------------------------------------
-- Etapa 3: Validação dos dados após atualização
-- ------------------------------------------------------

SELECT nome_produto, COUNT(nome_produto) AS Qtd,
CASE
    WHEN nome_produto = 'Bola de Futebol' AND preco NOT BETWEEN 20 AND 100 then 'Fora'
    WHEN nome_produto = 'Chocolate' AND preco NOT BETWEEN 10 AND 50 then 'Fora'
    WHEN nome_produto = 'Celular' AND preco NOT BETWEEN 80 AND 5000 then 'Fora'
    WHEN nome_produto = 'Livro de Ficção' AND preco NOT BETWEEN 10 AND 200 then 'Fora'
    WHEN nome_produto = 'Camisa' AND preco NOT BETWEEN 80 AND 200 then 'Fora'
    ELSE 'Ok'
END AS CategoriaPreco
from produtos
GROUP BY nome_produto, CategoriaPreco;
1 resposta

Ei! Tudo bem, Derek?

Parabéns pela dedicação no curso de SQLite online e por estruturar de forma tão organizada esse desafio de análise de dados com SQL para a Black Friday! A sua linha de raciocínio dividida em etapas (Exploração, Atualização e Validação) segue as melhores práticas da rotina de quem trabalha com banco de dados.

Gostei muito da sua estratégia matemática de usar a lógica do ABS(RANDOM()) % amplitude + limite_inferior para gerar valores randômicos dentro das faixas corretas de cada categoria. Suas contas de amplitude ficaram certinhas (por exemplo, 81 + 20 para a bola, cobrindo o intervalo de 20 a 100).

Foi tranquilo enquanto estava praticando ou teve dificuldade em algum ponto? E como resolveu?

Material Complementar
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!