中國域名注冊中心做博客的seo技巧
postgresql 分類排名
- 排名窗口函數(shù)
- 示例
- CUME_DIST 和 NTILE
排名窗口函數(shù)
排名窗口函數(shù)用于對數(shù)據(jù)進行分組排名。常見的排名窗口函數(shù)包括:
? ROW_NUMBER,為分區(qū)中的每行數(shù)據(jù)分配一個序列號,序列號從 1 開始分配。
? RANK,計算每行數(shù)據(jù)在其分區(qū)中的名次;如果存在名次相同的數(shù)據(jù),后續(xù)的排名將會
產(chǎn)生跳躍。
? DENSE_RANK,計算每行數(shù)據(jù)在其分區(qū)中的名次;即使存在名次相同的數(shù)據(jù),后續(xù)的
排名也是連續(xù)的值。
? PERCENT_RANK,以百分比的形式顯示每行數(shù)據(jù)在其分區(qū)中的名次;如果存在名次相
同的數(shù)據(jù),后續(xù)的排名將會產(chǎn)生跳躍。
? CUME_DIST,計算每行數(shù)據(jù)在其分區(qū)內(nèi)的累積分布,也就是該行數(shù)據(jù)及其之前的數(shù)據(jù)
的比率;取值范圍大于 0 并且小于等于 1。
? NTILE,將分區(qū)內(nèi)的數(shù)據(jù)分為 N 等份,為每行數(shù)據(jù)計算其所在的位置。
排名窗口函數(shù)不支持動態(tài)的窗口大小(frame_clause),而是以當前分區(qū)作為分析的窗口。
示例
按照部門為單位,計算員工的月薪排名:
select
first_name,last_name,department_id,salary,
row_number() over(partition by department_id order by salary desc),
rank() over(partition by department_id order by salary desc),
dense_rank() over(partition by department_id order by salary desc),
percent_rank() over(partition by department_id order by salary desc)
from employees;
以上示例中 4 個窗口函數(shù)的 OVER 子句完全相同,此時可以采用一種更簡單的寫法:
select
first_name,last_name,department_id,salary,
row_number() over w,
rank() over w,
dense_rank() over w,
percent_rank() over w
from employees
window w as (partition by department_id order by salary desc);
CUME_DIST 和 NTILE
select
first_name,last_name,department_id,salary,
cume_dist() over w,
ntile(6) over w
from employees
window w as (partition by department_id order by salary desc);