ウィンドウ関数を使用して各グループの最初の N 行を取得します
この記事では、SQL ウィンドウ関数を使用して、グループ化されたデータから最初の N 行を効率的に抽出する方法について説明します。 これは、多くのデータ分析シナリオで非常に実用的です。
MySQL 8 以降では、一般的に使用される 3 つのウィンドウ関数、ROW_NUMBER
、RANK
、DENSE_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
catid
p01
rank
:
DENSE_RANK
右ウィンドウ関数を選択します:RANK
catid
どのウィンドウ関数が特定のニーズと「フロントNライン」の定義に依存します。 すべての行を使用する必要がある場合は、同じ値の同じランキングを使用する場合は、p01
を使用してください。 dense_rank
以上がウィンドウ関数を使用して、SQLの各グループの上部n行を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。