So zählen Sie aufeinanderfolgende Vorkommen in der Spalte einer Tabelle
Beim Arbeiten mit Daten in einer Tabelle kann es nützlich sein, die Anzahl zu zählen wie oft ein Wert nacheinander in einer bestimmten Spalte vorkommt. Wenn eine Tabelle beispielsweise eine Spalte mit den Namen von Mitarbeitern enthält, möchten Sie möglicherweise wissen, wie oft derselbe Mitarbeitername in einer Zeile vorkommt.
Problem
Betrachten Sie die folgende Tabelle:
create table #t (Id int, Name char) insert into #t values (1, 'A'), (2, 'A'), (3, 'B'), (4, 'B'), (5, 'B'), (6, 'B'), (7, 'C'), (8, 'B'), (9, 'B')
Das Ziel besteht darin, die Anzahl der aufeinanderfolgenden Vorkommen jedes Werts in der Spalte „Name“ zu zählen. Die gewünschte Ausgabe ist:
Name | Repetition |
---|---|
A | 2 |
B | 4 |
C | 1 |
B | 2 |
Lösung
Ein Ansatz zur Lösung dieses Problems besteht darin, das Konzept der Zeilennummern zu verwenden und dann die Differenz zwischen ihnen zu berechnen, um sie zu identifizieren aufeinanderfolgende Ereignisse. Die folgende Abfrage veranschaulicht diesen Ansatz:
select name, count(*) from (select t.*, (row_number() over (order by id) - row_number() over (partition by name order by id) ) as grp from t ) t group by grp, name;
Erklärung
Die Unterabfrage in der Abfrage:
(select t.*, (row_number() over (order by id) - row_number() over (partition by name order by id) ) as grp from t )
berechnet die Zeilennummern für jede Zeile in der 't'-Tabelle. Die Funktion row_number() weist jeder Zeile eine fortlaufende Nummer zu, während die Klausel „partition by“ dafür sorgt, dass die Zeilennummern für jeden einzelnen Wert in der Spalte „Name“ zurückgesetzt werden. Dies führt zur Spalte „grp“, die die Gruppe aufeinanderfolgender Vorkommen für jede Kombination aus „Name“ und „ID“ angibt.
Die äußere Abfrage gruppiert dann die Ergebnisse nach der Spalte „grp“ und zählt die Anzahl der Vorkommen für jede Kombination aus „grp“ und „Name“. Dies liefert das Endergebnis, das die aufeinanderfolgenden Vorkommen jedes Werts in der Spalte „Name“ zählt.
Durch die Nutzung der Differenz zwischen Zeilennummern ermittelt dieser Ansatz genau die aufeinanderfolgenden Vorkommen von Werten in der angegebenen Spalte und erzeugt Ergebnisse die gewünschte Ausgabe.
Das obige ist der detaillierte Inhalt vonWie zähle ich aufeinanderfolgende Wertvorkommen in einer Datenbankspalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!