sql 中 rank 函數(shù)根據(jù)指定列排序后對行進行排名,結果集返回每個行的排名,從 1 開始,相同值具有相同排名。分區(qū)表達式可指定分區(qū)列,僅在每個分區(qū)內進行排名,排序表達式指定排序列,排名按此列數(shù)據(jù)順序確定。
SQL 中 RANK 函數(shù)的用法
RANK 函數(shù)用于對一組行進行排名,根據(jù)指定列中數(shù)據(jù)的順序。它是一個聚合函數(shù),會在聚合后的結果集中返回每個行的排名。
語法
<code>RANK() OVER (PARTITION BY partition_expression ORDER BY order_expression)</code>
登錄后復制
參數(shù)
partition_expression: 可選,指定分區(qū)列。如果指定,則排名只在每個分區(qū)內進行。
order_expression: 指定排序列。行的排名將根據(jù)此列中數(shù)據(jù)的順序確定。
返回值
RANK 函數(shù)返回一個整數(shù),表示每個行的排名。排名從 1 開始,排在第一位的行具有最高的排名。如果多行具有相同的值,則它們將具有相同的排名。
示例
<code class="sql">SELECT department_id, employee_name, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank FROM employee_table;</code>
登錄后復制
結果
<code>department_id | employee_name | rank ------------- | ------------- | ---- 1 | John Smith | 1 1 | Jane Doe | 2 2 | Peter Parker | 1 2 | Mary Johnson | 2</code>
登錄后復制
在這個示例中,我們對 employee_table 按 department_id 分區(qū)并按 salary 降序排序。對于每個部門,員工會根據(jù)其工資進行排名。
注意
如果未指定分區(qū)表達式,則排名將在整個表中進行。
RANK 函數(shù)對重復值敏感。如果多行具有相同的值,則它們將具有相同的排名。
RANK 函數(shù)與 DENSE_RANK 函數(shù)類似,但 DENSE_RANK 函數(shù)不跳過重復值的排名。






