Oii, Felipe! Como você está?
Parabéns pela atividade realizada! É muito legal ver você querendo explorar outras formas de realizar a consulta. Vamos ver a opção de usar subconsultas ou CTEs (Common Table Expressions) para organizar os dados antes de agrupar e ordenar. Segue um exemplo usando CTE:
WITH Vendas_Categorias AS (
SELECT
strftime('%Y/%m', v.data_venda) AS Tempo,
c.nome_categoria AS Categorias,
iv.produto_id
FROM
categorias c
JOIN
produtos p ON c.id_categoria = p.categoria_id
JOIN
itens_venda iv ON p.id_produto = iv.produto_id
JOIN
vendas v ON iv.venda_id = v.id_venda
)
SELECT Tempo, Categorias,
COUNT(produto_id) AS Qtd_Vendas
FROM Vendas_Categorias
GROUP BY Categorias, Tempo
ORDER BY Categorias;
Traduzindo: a CTE Vendas_Categorias
primeiro coleta os dados relevantes, depois a consulta principal agrupa e conta as vendas por categoria e tempo.
Faça o teste e observe se o código retorna como esperado. Qualquer dúvida, não deixe de compartilhar no fórum.
Bons estudos, Felipe!