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;