Compte distinct avec fonctions de partition : COUNT() OVER vs DISTINCT
Cette question explore l'utilisation de la clause OVER de SQL dans le calcul des comptes distincts . L'utilisateur tente d'utiliser la fonction COUNT() OVER (PARTITION BY ...) avec le mot-clé DISTINCT pour obtenir un total cumulé d'utilisateurs uniques au cours d'un mois donné. Cependant, cette approche se heurte à une erreur.
L'erreur survient car les fonctions OVER de SQL Server ne prennent actuellement pas en charge le mot-clé DISTINCT dans la clause de partition. Par conséquent, l'utilisateur ne peut pas appliquer un comptage distinct pendant le partitionnement.
Une solution à ce problème consiste à utiliser la fonction dense_rank(). L'expression suivante obtient le résultat souhaité :
dense_rank() over (partition by [Mth] order by [UserAccountKey]) + dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) - 1
En appliquant dense_rank() deux fois et en soustrayant les résultats, l'expression compte effectivement le nombre de valeurs distinctes dans la colonne spécifiée au cours de chaque mois. Cette méthode fournit la même fonctionnalité que la méthode COUNT() OVER (PARTITION BY ...) initialement prévue avec DISTINCT.
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!