Olá, Vitor, tudo bem?
Desde já peço desculpas pela demora em obter retorno.
Vitor analisei a sua consulta e tenho algumas correções.
A sua consulta retorna o total de vendas de cada tipo de embalagem de produto em 2016. No entanto, a atividade proposta pede o ranking das vendas por tamanho no ano de 2016.
Para resolver essa questão utilizaremos três tabelas, a itens_notas_fiscais
para pegar a quantidade; a tabela_de_produtos
para pegar o tamanho e por fim a tabela de notas_fiscais
para pegar o ano.
Iremos utilizar duas subconsultas. Mas vamos por etapas, a primeira é fazer a subconsulta VENDA_TAMANHO
que calcula a quantidade total de vendas de produtos por tamanho no ano de 2016.
A consulta ficará assim:
SELECT TP.TAMANHO, YEAR(NF.DATA_VENDA) AS ANO, SUM(INF.QUANTIDADE) AS QUANTIDADE FROM
TABELA_DE_PRODUTOS TP
INNER JOIN ITENS_NOTAS_FISCAIS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN NOTAS_FISCAIS NF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY TP.TAMANHO, YEAR(NF.DATA_VENDA);
Em seguida, iremos fazer uma consulta que contém a soma da quantidade total de produtos vendidos nesse ano.
SELECT YEAR(NF.DATA_VENDA) AS ANO, SUM(INF.QUANTIDADE) AS QUANTIDADE FROM
TABELA_DE_PRODUTOS TP
INNER JOIN ITENS_NOTAS_FISCAIS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN NOTAS_FISCAIS NF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY YEAR(NF.DATA_VENDA);
Agora, utilizaremos a cláusula INNER JOIN
combinando essas duas subconsultas com base no ano de venda dos produtos, para que os dados possam ser comparados. A cláusula SELECT
retorna quatro colunas: TAMANHO
, ANO
, QUANTIDADE
(a quantidade de produtos vendidos em cada grupo) e PARTICIPAÇÃO (a porcentagem de vendas para cada tamanho em relação ao total de vendas em cada ano). A coluna PARTICIPAÇÃO é calculada dividindo a QUANTIDADE
pelo total de vendas em cada ano e multiplicando por 100. A função ROUND
é usada para arredondar o resultado para duas casas decimais.
O código completo ficará assim:
SELECT VENDA_TAMANHO.TAMANHO, VENDA_TAMANHO.ANO, VENDA_TAMANHO.QUANTIDADE,
ROUND((VENDA_TAMANHO.QUANTIDADE/VENDA_TOTAL.QUANTIDADE) * 100, 2) AS PARTICIPACAO FROM
(SELECT TP.TAMANHO, YEAR(NF.DATA_VENDA) AS ANO, SUM(INF.QUANTIDADE) AS QUANTIDADE FROM
TABELA_DE_PRODUTOS TP
INNER JOIN ITENS_NOTAS_FISCAIS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN NOTAS_FISCAIS NF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY TP.TAMANHO, YEAR(NF.DATA_VENDA)) AS VENDA_TAMANHO
INNER JOIN
(SELECT YEAR(NF.DATA_VENDA) AS ANO, SUM(INF.QUANTIDADE) AS QUANTIDADE FROM
TABELA_DE_PRODUTOS TP
INNER JOIN ITENS_NOTAS_FISCAIS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN NOTAS_FISCAIS NF ON NF.NUMERO = INF.NUMERO
WHERE YEAR(NF.DATA_VENDA) = 2016
GROUP BY YEAR(NF.DATA_VENDA)) AS VENDA_TOTAL
ON VENDA_TAMANHO.ANO = VENDA_TOTAL.ANO
ORDER BY VENDA_TAMANHO.QUANTIDADE DESC
Espero ter ajudado.
Vitor, caso surja alguma dúvida, fico à disposição.
Grande abraço e até mais!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!