Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Cálculo Porcentagem Total de Litros Vendido por Sabor com Erro

SELECT TABELA_AUXILIAR_A.SABOR, TABELA_AUXILIAR_A.ANO_DE_VENDA, TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM, 
    TABELA_AUXILIAR_A.QUANTIDADE_EMBALAGENS_VENDIDAS,
    ROUND(TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM * TABELA_AUXILIAR_A.QUANTIDADE_EMBALAGENS_VENDIDAS) AS TOTAL_LITROS_VENDIDO,
    ROUND((((TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM * TABELA_AUXILIAR_A.QUANTIDADE_EMBALAGENS_VENDIDAS) / 
    SUM(TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM * TABELA_AUXILIAR_A.QUANTIDADE_EMBALAGENS_VENDIDAS)) * 100), 2) AS PORCENTAGEM
FROM ( SELECT tabela_de_produtos.SABOR,
    YEAR(NOTAS_FISCAIS.DATA_VENDA) AS ANO_DE_VENDA,
    itens_notas_fiscais.QUANTIDADE, 
    SUM(ITENS_NOTAS_FISCAIS.QUANTIDADE) AS QUANTIDADE_EMBALAGENS_VENDIDAS,
        CASE
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '2 Litros' THEN 2.000
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '1,5 Litros' THEN 1.500
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '1 Litro' THEN 1.000
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '700 ml' THEN 0.700
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '470 ml' THEN 0.470
                WHEN TABELA_DE_PRODUTOS.TAMANHO = '350 ml' THEN 0.350
                ELSE 'NÃO FOI CONSUMIDO SUCOS'
       END AS QUANTIDADE_LITROS_EMBALAGEM
    FROM
        TABELA_DE_PRODUTOS
    INNER JOIN itens_notas_fiscais  ON TABELA_DE_PRODUTOS.CODIGO_DO_PRODUTO = itens_notas_fiscais.CODIGO_DO_PRODUTO
    INNER JOIN notas_fiscais ON notas_fiscais.NUMERO = itens_notas_fiscais.NUMERO
    WHERE YEAR(NOTAS_FISCAIS.DATA_VENDA) = 2016 GROUP BY TABELA_DE_PRODUTOS.SABOR, YEAR(NOTAS_FISCAIS.DATA_VENDA)) AS TABELA_AUXILIAR_A
    GROUP BY TABELA_AUXILIAR_A.SABOR ORDER BY TOTAL_LITROS_VENDIDO DESC;

https://imgbbb.com/images/2019/10/16/sql.png

3 respostas

Perdão não adicionei o campo EMBALAGEM da TABELA DE PRODUTOS para trazer todos os tipos de embalagem para cada sabor. A porcentagem continua com falha.

Muito Obrigado

Cássio Binsfeld

Olá Cássio!

Percebi onde está o problema, o problema está no seu ultimo GROUP BY, na seguinte parte:

GROUP BY TABELA_AUXILIAR_A.SABOR

Como você colocou a coluna TABELA_AUXILIAR_A.SABOR dentro do seu GROUP BY, assim ele sempre irá executar as funcões de agregação de acordo com esse GROUP BY. Para você perceber e entender melhor o que está acontecendo tente executar apenas a função SUM no lugar da porcentagem, você verá que ele irá retornar o mesmo valor do campo TOTAL_LITROS_VENDIDO, pelo fato de que os dados estão agrupados pelo SABOR, assim ele executará a ação de multiplicar a QUANTIDADE_LITROS_EMBALAGEM pela QUANTIDADE_EMBALAGENS_VENDIDAS apenas se forem do mesmo SABOR, portanto o valor da SUM sempre será igual ao valor de TOTAL_LITROS_VENDIDO.

Assim, nessa consulta não será possível calcular o total geral da coluna TOTAL_LITROS_VENDIDO, para obter a porcentagem por SABOR.

Espero que tenha ajudado!

solução!

Entendi Jonilson. O select fica muito complexo pois: Possui várias embalagens para um sabor, uma porcentagem total para várias embalagens, uma quantidade de embalagens totais vendidas para várias embalagens, uma quantidade total de litros vendidos para várias embalagens.

Vou fazer o Curso de Store Procedure e trazer essa consulta.

Próximas metas:

1) Curso de Modelagem e Normalização

2) Curso de Store Procedure

3) Fazer todos cursos de banco de dados.

Grande abraço Super amigo.