宣言
RANK() OVER ([query_partition_clause] order_by_clause)
説明
この関数は、クエリ結果セット内の各行にランク(順位)を割り当てるために使用されます。この列は order_by_clause の列によって決定されます。
各パーティション内で、ランキングは1から始まり、順次増加します。ランクが同じ行については、次の返される値がスキップされます。例えば、2行のランクがともに1の場合、次の行のランクは2をスキップして3が割り当てられます。
query_partition_clause: ウィンドウのグループ(パーティション)を定義するために使用されます。つまり、各グループ内の行がランク付けされます。order_by_clause: 各パーティション内の行のソート順序を定義するために使用されます。
例
テーブル
employeesを作成します。CREATE TABLE employees(last_name CHAR(10), salary DECIMAL, job_id CHAR(32));テーブル
employeesにテストデータを挿入します。INSERT INTO employees VALUES('TOM', 11000, 'ENGINEERING'); INSERT INTO employees VALUES('IRIS', 11000, 'ENGINEERING'); INSERT INTO employees VALUES('MIKE', 12000, 'ENGINEERING'); INSERT INTO employees VALUES('LILY', 13000, 'ENGINEERING'); INSERT INTO employees VALUES('JIM', 2000, 'CLEANER');job_idでグループ化し、給与を昇順に並べ替えた場合、各行データのウィンドウ内のソート列上のランキング。SELECT last_name, RANK() OVER(PARTITION BY job_id ORDER BY salary) RANK FROM employees;実行結果は次のとおりです:
+-----------+------+ | last_name | RANK | +-----------+------+ | TOM | 1 | | IRIS | 1 | | MIKE | 3 | | LILY | 4 | | JIM | 1 | +-----------+------+ 5 rows in set