ホームページ > データベース > mysql チュートリアル > ウィンドウ関数を使用して、SQLの各グループの上部n行を取得するにはどうすればよいですか?

ウィンドウ関数を使用して、SQLの各グループの上部n行を取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-25 11:51:37
オリジナル
671 人が閲覧しました

How Can I Retrieve the Top N Rows for Each Group in SQL Using Window Functions?

ウィンドウ関数を使用して各グループの最初の N 行を取得します

この記事では、SQL ウィンドウ関数を使用して、グループ化されたデータから最初の N 行を効率的に抽出する方法について説明します。 これは、多くのデータ分析シナリオで非常に実用的です。

MySQL 8 以降では、一般的に使用される 3 つのウィンドウ関数、ROW_NUMBERRANKDENSE_RANK が提供されています。これらの関数は各行に数値を割り当て、各グループ内の最初の数行を選択できるようにします。

サンプルデータ:

次のデータセットがあると仮定します:

pkid catid value
1 p01 100
2 p01 90
3 p01 90
4 p01 80
5 p01 80
6 p01 80
7 p01 70
8 p01 60
9 p01 50
10 p01 40

3 つのウィンドウ関数の出力結果の比較:

pkid catid value row_number rank dense_rank
1 p01 100 1 1 1
2 p01 90 2 2 2
3 p01 90 3 2 2
4 p01 80 4 4 3
5 p01 80 5 4 3
6 p01 80 6 4 3
7 p01 70 7 7 4
8 p01 60 8 8 5
9 p01 50 9 9 6
10 p01 40 10 10 7

関数の説明:

  • :各グループの各行に一意の注文番号が割り当てられ、1から1つが割り当てられます。たとえば、ROW_NUMBER値は1〜5です。 catid p01 row_number

  • :すべてのランキングは各グループの各行に割り当てられ、同じ値が同じです。たとえば、

    の値は1〜5です(一部の値が繰り返されていても)。 RANK catidp01 rank

    に似ていますが、同じ値のランキングは継続的であり、ギャップはありません。たとえば、
  • の値は1〜5です(一部の値が繰り返されていても)。
  • DENSE_RANK右ウィンドウ関数を選択します:RANK catidどのウィンドウ関数が特定のニーズと「フロントNライン」の定義に依存します。 すべての行を使用する必要がある場合は、同じ値の同じランキングを使用する場合は、p01を使用してください。 dense_rank

以上がウィンドウ関数を使用して、SQLの各グループの上部n行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート