Maison > base de données > tutoriel mysql > Comment puis-je compter les valeurs distinctes dans les partitions dans SQL Server ?

Comment puis-je compter les valeurs distinctes dans les partitions dans SQL Server ?

Barbara Streisand
Libérer: 2025-01-04 14:13:40
original
857 Les gens l'ont consulté

How Can I Count Distinct Values Within Partitions in SQL Server?

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])
Copier après la connexion

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
Copier après la connexion

Cette expression calcule le total cumulé de valeurs distinctes au cours de chaque mois. Voici comment cela fonctionne :

  • Le premier terme, dense_rank() over (partition par [Mth] ordre par [UserAccountKey]), attribue un classement à chaque valeur dans [UserAccountKey] au cours de chaque mois, en commençant à partir de 1.
  • Le deuxième terme, dense_rank() sur (partition par [Mth] ordre par [UserAccountKey] desc), classe les valeurs dans l'ordre inverse, également à partir de 1.
  • La soustraction du deuxième terme du premier produit un résultat de 0 pour les valeurs en double et le rang de la première occurrence pour les valeurs uniques.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal