455 votes

SQL Server : Différence entre PARTITION par et groupe de

J’ai été en utilisant pour tous les types de requêtes d’agrégation au fil des ans. Récemment, j’ai été rétro-ingénierie du code qui utilise pour effectuer des agrégations. En lisant tous les documents, je peux trouver sur , cela ressemble beaucoup à , peut-être avec quelques fonctionnalités supplémentaires ajoutées dans ? Ils sont deux versions de la même fonctionnalité générale, ou ils sont quelque chose de différent entièrement ?

533voto

Andomar Points 115404

Ils sont utilisés dans des endroits différents. group by modifie l'intégralité de la requête, comme:

select customerId, count(*) as orderCount
from Orders
group by customerId

Mais partition by fonctionne 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 normalement réduit le nombre de lignes retournées par le roulement et le calcul des moyennes ou les sommes de chaque ligne. partition by n'affecte pas le nombre de lignes renvoyées, mais il change la façon dont une fonction de fenêtre de résultat est calculé.

59voto

ne roule pas réellement les données. Il permet de rétablir quelque chose sur une base par groupe. Par exemple, vous pouvez obtenir une colonne ordinale au sein d’un groupe en partitionnant sur le champ de regroupement et à l’aide de sur les lignes au sein de ce groupe. Cela vous donne quelque chose qui se comporte un peu comme une colonne identity qui remet à zéro au début de chaque groupe.

46voto

Will Marcouiller Points 11649
<blockquote> <p>PARTITION BY divise le résultat mis en partitions. La fonction de fenêtre est appliquée séparément à chaque partition et calcul redémarre pour chaque partition.</p> </blockquote> <p>Trouvé à ce lien : <a href="http://msdn.microsoft.com/en-us/library/ms189461.aspx">au fil de la Clause</a></p>

42voto

OMG Ponies Points 144785

est analytique, tandis que est globale. Afin d’utiliser `` , vous devez contenir int avec un plus de clause.

40voto

adolf garlic Points 1633

Il fournit des données de roulé sans rouler

par exemple Supposons que je veux revenir à la position relative de la région de ventes

À l’aide de PARTITION BY, je peux retourner le montant des ventes pour une région donnée et le montant maximum dans toutes les régions de ventes dans la même ligne.

Cela signifie que vous aurez à répéter des données, mais il peut convenir au consommateur final en ce sens que les données a été regroupées, mais aucune donnée n’a été perdue - comme c’est le cas avec GROUP BY.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X