首頁 >資料庫 >mysql教程 >如何計算資料庫列中連續出現的值?

如何計算資料庫列中連續出現的值?

Patricia Arquette
Patricia Arquette原創
2025-01-05 15:16:43763瀏覽

How to Count Consecutive Value Occurrences in a Database Column?

如何計算表列中連續出現的次數

處理表中的資料時,計算連續出現的次數可能很有用某個值在特定列中連續出現的次數。例如,如果表格包含代表員工姓名的列,您可能會想知道同一員工姓名在一行中出現的次數。

問題

考慮下表:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn