ホームページ >データベース >mysql チュートリアル >データベース列内の連続する値の出現をカウントするにはどうすればよいですか?

データベース列内の連続する値の出現をカウントするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-05 15:16:43756ブラウズ

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 Repetition
A 2
B 4
C 1
B 2

この問題を解決する 1 つのアプローチは、行番号の概念を使用し、それらの差を計算して識別することです。連続発生。次のクエリは、このアプローチを示しています。

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」列の個別の値ごとに行番号が確実にリセットされます。これにより、「名前」と「ID」の組み合わせごとに連続して出現するグループを示す「grp」列が生成されます。

次に、外側のクエリは結果を「grp」列でグループ化し、その結果をカウントします。 「grp」と「Name」の各組み合わせの出現数。これにより、「Name」列内の各値の連続出現数をカウントする最終結果が得られます。

このアプローチでは、行番号の差を利用することで、指定された列内の値の連続出現を正確に判断し、次の結果が得られます。目的の出力。

以上がデータベース列内の連続する値の出現をカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。