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

SQL テーブル内の値の連続出現をカウントするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 15:40:40142ブラウズ

How to Count Consecutive Occurrences of Values in a SQL Table?

連続出現に基づいて値をグループ化する

テーブル内の値の連続出現をカウントするには、行の差を計算するのが効果的な方法です。

次の点を考慮してください。 query:

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;

このサブクエリは、行ごとに 2 つの行番号を生成します:

  • row_number() over (order by id): 全体的な行順序に基づく連続番号。
  • row_number() over (名前順、ID 順にパーティション化): 一意のそれぞれに固有の連続番号name.

2 つの行番号を減算することで、名前が変更されるか、同じ名前が明確に連続して出現するたびに増加する「グループ」識別子 (grp) を作成します。

最後のクエリは、この grp に基づいて行をグループ化し、各グループ内の各名前の出現数をカウントします。これにより、望ましい連続出現数が得られます。

+------+------------+
| Name | Repetition |
+------+------------+
| A    |          2 |
| B    |          4 |
| C    |          1 |
| B    |          2 |
+------+------------+

このアプローチでは、行番号の違いをグループ化メカニズムとして利用することで、テーブル内の連続する値を識別する効率的な方法が提供されます。

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

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