メインコンテンツへスキップ
現在の行を、そのパーティション内で欠番ありの順位として割り当てます。つまり、処理対象の行の値がそれ以前の行の値と等しい場合、その行には前の行と同じ順位が割り当てられます。 次の行の順位は、前の行の順位に、同じ順位が割り当てられた回数分の欠番を加えた値になります。 dense_rank 関数は同様の動作をしますが、順位に欠番は生じません。 構文
rank ()
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        [ROWS or RANGE expression_to_bound_rows_withing_the_group]] | [window_name])
FROM table_name
WINDOW window_name as ([[PARTITION BY grouping_column] [ORDER BY sorting_column])
ウィンドウ関数の構文の詳細については、Window Functions - 構文を参照してください。 戻り値
  • 現在の行が属するパーティション内での番号です。欠番を含みます。UInt64
以下の例は、動画チュートリアルRanking window functions in ClickHouseで紹介されている例に基づいています。
Query
CREATE TABLE salaries
(
    `team` String,
    `player` String,
    `salary` UInt32,
    `position` String
)
Engine = Memory;

INSERT INTO salaries FORMAT Values
    ('Port Elizabeth Barbarians', 'Gary Chen', 195000, 'F'),
    ('New Coreystad Archdukes', 'Charles Juarez', 190000, 'F'),
    ('Port Elizabeth Barbarians', 'Michael Stanley', 150000, 'D'),
    ('New Coreystad Archdukes', 'Scott Harrison', 150000, 'D'),
    ('Port Elizabeth Barbarians', 'Robert George', 195000, 'M'),
    ('South Hampton Seagulls', 'Douglas Benson', 150000, 'M'),
    ('South Hampton Seagulls', 'James Henderson', 140000, 'M');
Query
SELECT player, salary,
       rank() OVER (ORDER BY salary DESC) AS rank
FROM salaries;
Response
   ┌─player──────────┬─salary─┬─rank─┐
1. │ Gary Chen       │ 195000 │    1 │
2. │ Robert George   │ 195000 │    1 │
3. │ Charles Juarez  │ 190000 │    3 │
4. │ Douglas Benson  │ 150000 │    4 │
5. │ Michael Stanley │ 150000 │    4 │
6. │ Scott Harrison  │ 150000 │    4 │
7. │ James Henderson │ 140000 │    7 │
   └─────────────────┴────────┴──────┘
最終更新日 2026年6月10日