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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-05 06:43:42201ブラウズ

How to Efficiently Count Consecutive Value Occurrences in a SQL Table?

テーブル内の値の連続出現数のカウント

値の列を含むテーブルを持つデータベースで、連続出現数を決定する各値の計算は、さまざまなデータ分析シナリオで役立つタスクです。この質問では、効率的な SQL テクニックを使用してこのカウントを達成するという課題について検討します。

提供されたデータは、値「A」、「B」、および「C」を含む ID 列と Name 列を含むテーブルで構成されます。目的は、[名前] 列でこれらの値が連続して出現する回数をカウントし、結果を次のように表示することです:

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

試みた 1 つのアプローチは、名前によるパーティションに対して COUNT() 関数を使用することでしたが、これにより次のような結果が得られました。間違った結果。これに対処するために、行番号を利用する代替方法を採用できます。

次のコード スニペットは、改善されたソリューションを示しています。

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 つの行番号の差を利用して連続する行番号を識別します。出来事。全体の行番号から各グループ内の行番号を減算することにより、連続する値シーケンスごとに一意のグループ化識別子が作成されます。次に、COUNT() 関数がこれらのグループに適用され、値が連続して出現するたびに必要なカウントが提供されます。

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

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