Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Desafio: ajuste de valores em bases de produtos

Boa tarde, a resolução do desafio:

/*
Em bases de dados reais, é comum encontrar erros e inconsistências, especialmente em valores numéricos como preços de produtos.
Identificar e corrigir esses erros é essencial para a validação das análises de dados.

Há uma necessidade de verificar e ajustar os preços dos produtos na base de dados,
já que alguns itens apresentam valores fora do intervalo considerado normal ou esperado.

Tarefa:
    Análise da base de dados de produtos para identificar preços que estão fora dos intervalos especificados.
    Atualize os registros de preços para assegurar que todos estejam dentro dos limites aceitáveis.

Tabela de Intervalos de Preços Aceitáveis:

PRODUTO 			MINIMO	MAXIMO
bola de futebol		20		100
chocolate			10		50
celular				80		5000
livro de ficcao		10		200
camisa				80		200
*/

-- identificar os produtos aceitaveis
create view vw_produtos_aceitaveis as
select * from produtos
where (lower(nome_produto) like 'bola de futebol') and (preco between 20 and 100)
union all
select * from produtos
where (lower(nome_produto) like 'chocolate') and (preco between 10 and 50)
union all
select * from produtos
where (lower(nome_produto) like 'celular') and (preco between 80 and 5000)
union all
select * from produtos
where (lower(nome_produto) like 'livro de ficção') and (preco between 10 and 200)
union all
select * from produtos
where (lower(nome_produto) like 'camisa') and (preco between 80 and 200)
order by id_produto asc;

-- identificar a media de preco dos produtos aceitaveis
create view vw_produto_media_preco as
select nome_produto, avg(preco) as media_preco from vw_produtos_aceitaveis group by nome_produto;

-- dar o update nos produtos inaceitaveis, fazendo seus precos serem igual a media dos produtos aceitaveis
begin TRANSACTION;
update produtos
set preco = m.media_preco
from vw_produto_media_preco m
where produtos.nome_produto = m.nome_produto
and produtos.id_produto not in (select id_produto from vw_produtos_aceitaveis);

COMMIT;
--rollback;
1 resposta
solução!

Boa noite Victoria! Tudo bem com você?

Obrigado por compartilhar sua resolução com a comunidade Alura. Como relembrar é manter vivo na memória, deixo abaixo uma tabela com um resumo dos principais funções que você utilizou no código:

FunçãoDescrição
CREATE VIEWCria uma visão (view) temporária com base em uma consulta SQL, facilitando o acesso a dados filtrados.
SELECTSeleciona dados de uma tabela ou visão, podendo incluir filtros como condições WHERE.
WHEREFiltra os resultados com base em condições específicas (por exemplo, intervalo de preços ou nome do produto).
UNION ALLCombina os resultados de múltiplas consultas, mantendo todas as linhas (sem remover duplicatas).
ORDER BYOrdena os resultados da consulta com base em uma ou mais colunas, geralmente usando ASC (ascendente).
AVGFunção agregadora que calcula a média dos valores de uma coluna (por exemplo, a média de preços).
BEGIN TRANSACTIONInicia uma transação, garantindo que as alterações no banco de dados sejam feitas de forma atômica e segura.
UPDATEModifica os dados existentes em uma tabela, alterando valores de colunas específicas.
SETDefine os novos valores a serem atribuídos a colunas durante uma atualização (UPDATE).
NOT INFiltra os resultados para excluir determinados valores de uma lista (excluindo produtos com IDs específicos).
COMMITFinaliza a transação e aplica permanentemente as alterações feitas no banco de dados.
ROLLBACKDesfaz todas as alterações feitas em uma transação, revertendo os dados ao estado anterior.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!