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 ?
Réponses
Trop de publicités?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é.
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.
est analytique, tandis que
est globale. Afin d’utiliser `` , vous devez contenir int avec un plus de clause.
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.