Ils sont utilisés à différents endroits. group by modifie toute la requête, comme :
select customerId, count(*) as orderCount
from Orders
group by customerId
Mais partition by fonctionne uniquement sur une fonction de fenêtre, comme row_number :
select row_number() over (partition by customerId order by orderId)
as OrderNumberForThisCustomer
from Orders
Un group by réduit normalement le nombre de lignes renvoyées en les cumulant et en calculant des moyennes ou des sommes pour chaque ligne. partition by n'affecte pas le nombre de lignes renvoyées, mais modifie la façon dont le résultat d'une fonction de fenêtre est calculé.