Heim >Datenbank >MySQL-Tutorial >Wie kann ich unterschiedliche Werte innerhalb von Partitionen in SQL Server zählen?

Wie kann ich unterschiedliche Werte innerhalb von Partitionen in SQL Server zählen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-04 14:13:40873Durchsuche

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

Eindeutige Werte über Partitionen mit COUNT() OVER zählen

Überwindung der Herausforderung, unterschiedliche Werte zu zählen, wenn die Partitionsfunktion COUNT() OVER verwendet wird ist ein häufiges Problem in SQL Server. In diesem Artikel wird ein alternativer Ansatz untersucht, um das gewünschte Ergebnis mithilfe einer Kombination aus dense_rank() und arithmetischen Operationen zu erzielen.

Ursprüngliche Abfrage und Fehler

Die ursprüngliche Abfrage versucht zu berechnen eine laufende Summe unterschiedlicher Werte mit COUNT(DISTINCT) OVER:

NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])

SQL Server generiert jedoch einen fälligen Fehler zur Inkompatibilität von DISTINCT mit Partitionsfunktionen.

Alternative Lösung mit Dense_rank()

Eine praktische Lösung für dieses Problem ist die Verwendung der Funktion dense_rank() in Verbindung mit einfache arithmetische Operationen:

dense_rank() over (partition by [Mth] order by [UserAccountKey]) 
+ dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) 
- 1

Dieser Ausdruck berechnet die laufende Summe unterschiedlicher Werte innerhalb jedes Monats. So funktioniert es:

  • Der erste Begriff, dense_rank() over (partition by [Mth] order by [UserAccountKey]), weist jedem Wert in [UserAccountKey] innerhalb jedes Monats einen Rang zu, beginnend mit ab 1.
  • Der zweite Term, dense_rank() over (partition by [Mth] order by [UserAccountKey] desc), ordnet Werte ebenfalls in der umgekehrten Reihenfolge beginnend bei 1.
  • Das Subtrahieren des zweiten Termes vom ersten ergibt ein Ergebnis von 0 für doppelte Werte und den Rang des ersten Vorkommens für eindeutige Werte.

Das obige ist der detaillierte Inhalt vonWie kann ich unterschiedliche Werte innerhalb von Partitionen in SQL Server zählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn