Gostaria de compartilhar a resolução da atividade utilizando CTEs ( Common Table Expressions) ou Expressão de tabela comum. Como tenho dois SELECTs, um que calcula a venda por tamanho e o outro a venda total, ambos serão executados como uma tabela temporária que existe apenas durante a execução da consulta e isso me permitiu a utilização de CTEs. Você pode encontrar sobre CTEs na própria documentação do Mysql e também no artigo da Alura (link abaixo).
Documentação Mysql: https://dev.mysql.com/doc/refman/8.4/en/with.html
Artigo da Alura: https://www.alura.com.br/artigos/cte-o-que-e-para-que-serve-sql
Explicação da estrutura do código. A cláusula WITH define duas CTEs. Cada CTE foi definida pelo nome. A primeira é a venda_tamanho e a segunda é a venda_total, separadas por virgula. O último select representa a consulta principal responsável por mostrar o resultado esperado (TAMANHO, ANO_VENDA, QUANTIDADE_VENDIDA e PARTICIPACAO ) e também por fazer a junção entre as duas CTEs utilizando o INNER JOIN, tendo a coluna ANO_VENDA como referência entre as duas CTEs.
WITH venda_tamanho AS (
SELECT
P.TAMANHO AS TAMANHO,
YEAR(N.DATA_VENDA) AS ANO_VENDA,
SUM(I.QUANTIDADE) AS QUANTIDADE_VENDIDA
FROM
tabela_de_produtos P
INNER JOIN
itens_notas_fiscais I ON P.CODIGO_DO_PRODUTO = I.CODIGO_DO_PRODUTO
INNER JOIN
notas_fiscais N ON I.NUMERO = N.NUMERO
WHERE
YEAR(N.DATA_VENDA) = 2016
GROUP BY
P.TAMANHO,
YEAR(N.DATA_VENDA)
),
venda_total AS (
SELECT
YEAR(DATA_VENDA) AS ANO_VENDA,
SUM(I.QUANTIDADE) AS QUANTIDADE_TOTAL
FROM
notas_fiscais N
INNER JOIN
itens_notas_fiscais I ON N.NUMERO = I.NUMERO
WHERE
YEAR(N.DATA_VENDA) = 2016
GROUP BY
YEAR(N.DATA_VENDA)
)
SELECT
VS.TAMANHO,
VS.ANO_VENDA,
VS.QUANTIDADE_VENDIDA,
ROUND((VS.QUANTIDADE_VENDIDA / VT.QUANTIDADE_TOTAL) *100, 2) AS PARTICIPACAO
FROM
venda_tamanho VS
INNER JOIN
venda_total VT ON VS.ANO_VENDA = VT.ANO_VENDA
ORDER BY
VS.QUANTIDADE_VENDIDA DESC;