1
resposta

Adicionar Porcentagem da Quantidade de Litros Vendidos por sabor pela Quantidade de Litros Vendidos Total

SELECT TABELA_AUXILIAR_A.SABOR, TABELA_AUXILIAR_A.TAMANHO, TABELA_AUXILIAR_A.ANO_DE_VENDA, TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM, 
    TABELA_AUXILIAR_A.QUANTIDADE_EMBALAGENS_TOTAL,
    ROUND((TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM * QUANTIDADE_EMBALAGENS_TOTAL),3) AS QUANTIDADE_LITROS_TOTAL
FROM (
    SELECT tabela_de_produtos.SABOR,
    tabela_de_produtos.TAMANHO,
    YEAR(NOTAS_FISCAIS.DATA_VENDA) AS ANO_DE_VENDA,
    SUM(ITENS_NOTAS_FISCAIS.QUANTIDADE) AS QUANTIDADE_EMBALAGENS_TOTAL,
        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, tabela_de_produtos.TAMANHO) AS TABELA_AUXILIAR_A ORDER BY TABELA_AUXILIAR_A.SABOR ASC, TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM DESC; 
1 resposta

Olá Cássio!

É uma dúvida bastante semelhante a uma outra que você teve um tempo atrás, porém o mesmo problema está acontecendo, o GROUP BY está em conflito com a função de agregação SUM, e dessa forma não temos como realizar a soma de todos os itens de uma coluna, para entender melhor, tente colocar a função SUM logo após QUANTIDADE_LITROS_TOTAL:

SUM(QUANTIDADE_EMBALAGENS_TOTAL) AS QUANTIDADE_EMBALAGENS_TOTAL_GERAL

Você receberá como resultado apenas uma linha com o sabor Açai com a QUANTIDADE_EMBALAGENS_TOTAL_GERAL igual a 3626240, que é o valor da soma geral de todas as embalagens independentemente do valor ou da quantidade de litros. Porém, você deseja receber a porcentagem de cada SABOR, mas o GROUP BY não permite nesse cenário.

Agora se ignoraremos o conflito em o GROUP BY e o SUM, a formula natural seria:

((ROUND((TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM *QUANTIDADE_EMBALAGENS_TOTAL), 3) / SUM(ROUND((TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM *QUANTIDADE_EMBALAGENS_TOTAL), 3))) * 100) AS PORCENTAGEM

Ele conseguirá realizar o SELECT e o resultado vai ser o sabor Açai e a porcentagem de 6.95, mais e a porcentagem dos outros sabores? Nesse cenário, não é possível.

Você ainda não deve ter visto, mas tem um dos cursos da carreia de MySQL que será apresentado a parte de funções no MySQL, e acho que com a utilização de uma função você conseguirá atingir seu objetivo com esse SELECT.

Acho que você poderia salvar esse SELECT no momento até chegar a parte de funções e tentar realizar o mesmo usando uma função que lhe retorne a soma:

SUM(ROUND((TABELA_AUXILIAR_A.QUANTIDADE_LITROS_EMBALAGEM *QUANTIDADE_EMBALAGENS_TOTAL), 3)))

Que é o empecilho para você conseguir o resultado esperado.

Espero ter ajudado!