如何計算表列中連續出現的次數
處理表中的資料時,計算連續出現的次數可能很有用某個值在特定列中連續出現的次數。例如,如果表格包含代表員工姓名的列,您可能會想知道同一員工姓名在一行中出現的次數。
問題
考慮下表:
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')
目標是計算「Name」中每個數值連續出現的次數 柱子。所需的輸出是:
Name | Repetition |
---|---|
A | 2 |
B | 4 |
C | 1 |
B | 2 |
解決方案
解決此問題的一種方法是使用行號的概念,然後計算它們之間的差異來識別連續出現。以下查詢示範了這種方法:
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;
說明
查詢中的子查詢:
(select t.*, (row_number() over (order by id) - row_number() over (partition by name order by id) ) as grp from t )
計算每個的行編號「t」表中的行。 row_number() 函數為每一行分配一個連續的編號,而partition by 子句確保為「Name」列中的每個不同值重設行號。這會產生「grp」列,該列指示「Name」和「Id」的每個組合的連續出現的群組。
接著外部查詢會依照「grp」欄位對結果分組並計算每個「grp」和「名稱」組合出現的次數。這提供了最終結果,該結果計算「名稱」列中每個值的連續出現次數。
透過利用行號之間的差異,該方法準確地確定指定列中值的連續出現次數並產生所需的輸出。
以上是如何計算資料庫列中連續出現的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!