Comptage de valeurs distinctes sur des partitions avec COUNT() OVER
Surmonter le défi du comptage de valeurs distinctes lors de l'utilisation de la fonction de partition COUNT() OVER est un problème courant dans SQL Server. Cet article explore une approche alternative pour obtenir le résultat souhaité en utilisant une combinaison de dense_rank() et d'opérations arithmétiques.
Requête et erreur d'origine
La requête d'origine tente de calculer un total cumulé de valeurs distinctes en utilisant COUNT(DISTINCT) OVER :
NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])
Cependant, SQL Server génère une erreur en raison de l'incompatibilité de DISTINCT avec les fonctions de partition.
Solution alternative utilisant Dense_rank()
Une solution pratique à ce problème consiste à utiliser la fonction dense_rank() en conjonction avec simple opérations arithmétiques :
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
Cette expression calcule le total cumulé de valeurs distinctes au cours de chaque mois. Voici comment cela fonctionne :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!