1
resposta

Acredito que essa seja a resolução

SELECT TP.EMBALAGEM, 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.EMBALAGEM, YEAR(NF.DATA_VENDA)
ORDER BY INF.QUANTIDADE DESC;
1 resposta

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software