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