Eles são usados em lugares diferentes.
group by
modifica toda a consulta, como:select customerId, count(*) as orderCount
from Orders
group by customerId
Mas
partition by
apenas funciona em uma função de janela, como row_number
:select row_number() over (partition by customerId order by orderId)
as OrderNumberForThisCustomer
from Orders
Um
group by
normalmente reduz o número de linhas retornadas acumulando-as e calculando médias ou somas para cada linha. partition by
não afeta o número de linhas retornadas, mas altera como o resultado de uma função de janela é calculado.