Maison >base de données >tutoriel mysql >Comment calculer des comptes distincts dans les partitions dans SQL Server sans utiliser DISTINCT ?

Comment calculer des comptes distincts dans les partitions dans SQL Server sans utiliser DISTINCT ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 19:06:40764parcourir

How to Calculate Distinct Counts Within Partitions in SQL Server Without Using DISTINCT?

Calcul de comptes distincts à l'aide de fonctions de partition

Dans SQL Server, la fonction COUNT() OVER vous permet d'agréger des données dans des partitions spécifiées. Toutefois, l'utilisation du mot-clé DISTINCT dans les fonctions de partition n'est pas prise en charge. Cela laisse les développeurs se demander comment obtenir des décomptes distincts au sein des partitions.

Utiliser DENSE_RANK

Une solution simple pour calculer des décomptes distincts consiste à utiliser la fonction DENSE_RANK. La requête suivante montre comment :

DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey])
+ DENSE_RANK() OVER (PARTITION BY [Mth] ORDER BY [UserAccountKey] DESC)
- 1

Cette expression calcule le nombre de UserAccountKeys distincts au cours de chaque mois. Pour ce faire, il classe d'abord les UserAccountKeys par ordre croissant et décroissant au cours de chaque mois. Ces classements sont ensuite additionnés et 1 est soustrait pour donner le décompte souhaité.

Exemple

Considérez les données suivantes :

| Mth | UserAccountKey |
|---|---|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | D |
| 2 | E |
| 2 | F |

Utilisation l'expression ci-dessus, la requête renverra ce qui suit résultats :

| Mth | NumUsers |
|---|---|
| 1 | 3 |
| 2 | 3 |

Conclusion

La fonction DENSE_RANK fournit une méthode concise et efficace pour calculer des décomptes distincts au sein des partitions dans SQL Server, même si le mot clé DISTINCT n'est pas directement pris en charge dans la clause PARTITION BY.

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!

Déclaration:
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