Olá Thiago, tudo bem?
Utilizamos o GROUP BY quando temos uma função de agregação(SUM, MAX, AVG..) na nossa query. Então, quando especificamos os campos que queremos retornar no select, precisamos informar todos no GROUP BY, mesmos que esses campos sejam de tabelas distintas, com exceção dos que estão fazendo parte da função de agregação, é como se estivéssemos dizendo como queremos que os dados que estão sendo agregados sejam agrupados e retornados.
Nesta query da atividade, temos quatro campos sendo informados no select, o campo Nome,Data, Quantidade e Preço. Porém os campos Quantidade e Preço fazem parte da função de agregação SUM, então eles não precisam estar no GROUP BY.
Já os campos Nome e Data que não estão em uma função de agregação, precisam ser informados no GROUP BY. A ordem que os valores serão agrupados, é a que será informada no GROUP BY, então primeiro os valores serão agrupados por nome e depois pela data.
Então, primeiro é realizado o agrupamento pelos clientes que faturaram no ano de 2016 e dentro deste agrupamento é realizado um outro agrupamento, que é o valor individual de cada cliente para o ano de 2016
Espero ter ajudado e bons estudos!