Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

Multiplicação após a divisão com resultado zero

Realizando o exercício junto com o instrutor, quando ele sugeriu multiplicar a divisão da parte pelo todo para obter a porcentagem, eu inseri a multiplicação após a divisão:

SELECT
Nome_categoria,
Qtd_Vendas, Qtd_Vendas/(select count(*) FROM itens_venda)*100.0 AS Porcentagem
FROM(
SELECT
c.nome_categoria AS Nome_categoria,
COUNT(iv.produto_id) AS Qtd_Vendas
FROM
itens_venda iv
JOIN vendas v on iv.venda_id = v.id_venda
JOIN produtos p on iv.produto_id = p.id_produto
join categorias c on p.categoria_id = c.id_categoria
GROUP BY
Nome_categoria
ORDER BY
Qtd_Vendas DESC
)
;

Utilizando essa ordem, a coluna Porcentagem resultou em zero.
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Colocando a multiplicação antes da divisão, o resultado ficou igual ao do instrutor.

SELECT
Nome_categoria,
Qtd_Vendas, 100.0* Qtd_Vendas/(select count(*) FROM itens_venda) AS Porcentagem
FROM(
SELECT
c.nome_categoria AS Nome_categoria,
COUNT(iv.produto_id) AS Qtd_Vendas
FROM
itens_venda iv
JOIN vendas v on iv.venda_id = v.id_venda
JOIN produtos p on iv.produto_id = p.id_produto
join categorias c on p.categoria_id = c.id_categoria
GROUP BY
Nome_categoria
ORDER BY
Qtd_Vendas DESC
)
;

Resultado:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O resultado não deveria ser o mesmo, independente da ordem da multiplicação?

1 resposta
solução!

Olá, Tomaz! Tudo bem?

A diferença nos resultados se deve à forma como o SQL lida com a divisão de inteiros.

Quando você faz a divisão Qtd_Vendas/(select count(*) FROM itens_venda), o SQL interpreta isso como uma divisão inteira, resultando em zero se Qtd_Vendas for menor que o total de vendas.

Ao multiplicar por 100.0 antes da divisão, você está forçando o SQL a tratar a operação como uma divisão de ponto flutuante, o que preserva as casas decimais e evita o arredondamento para zero.

Portanto, a ordem das operações importa nesse caso devido ao tipo de dados resultante da divisão. Multiplicar por 100.0 antes garante que a divisão seja feita com números decimais.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado