postgresql 分类排名

postgresql 分类排名

排名窗口函数

排名窗口函数用于对数据进行分组排名。常见的排名窗口函数包括:

ROW_NUMBER ,为分区中的每行数据分配一个序列号,序列号从 1 开始分配。

RANK ,计算每行数据在其分区中的名次;如果存在名次相同的数据,后续的排名将会

产生跳跃。

DENSE_RANK ,计算每行数据在其分区中的名次;即使存在名次相同的数据,后续的

排名也是连续的值。

PERCENT_RANK ,以百分比的形式显示每行数据在其分区中的名次;如果存在名次相

同的数据,后续的排名将会产生跳跃。

CUME_DIST ,计算每行数据在其分区内的累积分布,也就是该行数据及其之前的数据

的比率;取值范围大于 0 并且小于等于 1。

NTILE ,将分区内的数据分为 N 等份,为每行数据计算其所在的位置。

排名窗口函数不支持动态的窗口大小(frame_clause),而是以当前分区作为分析的窗口。

示例

按照部门为单位,计算员工的月薪排名:

sql 复制代码
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 个窗口函数的 OVER 子句完全相同,此时可以采用一种更简单的写法:

sql 复制代码
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

sql 复制代码
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);
相关推荐
zt1985q1 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理
IvorySQL5 小时前
PostgreSQL 技术日报 (6月3日)|复制日志补丁更新,PG 黑客坊开启
数据库·人工智能·postgresql
Mr.朱鹏7 小时前
基于 postgres_fdw 的跨库查询方案
java·数据库·spring boot·sql·spring·postgresql
数据库知识分享者小北8 小时前
AnalyticDB PostgreSQL 版软件 V2.0:安全可靠的全场景一站式数据仓库
数据库·postgresql·信创数据库·安全可靠数据库·analyticdb·阿里云 analyticdb
九皇叔叔20 小时前
PostgreSQL/openGauss pg_stats 视图从入门到精通:统计信息、执行计划与慢 SQL 优化实战
数据库·sql·postgresql
IvorySQL1 天前
PostgreSQL 技术日报 (5月31日)|内核功能研讨,PG 大会赛事动态
数据库·postgresql
阿坤带你走近大数据1 天前
Postgresql的介绍
数据库·postgresql·关系型数据库
阿坤带你走近大数据1 天前
GREENPLUM的介绍
数据仓库·postgresql·pgsql·mpp
逍遥德1 天前
PostgreSQL ---【序列】用法详解
数据库·后端·sql·postgresql
逍遥德1 天前
PostgreSQL --- 自增主键【序列】的避坑指南
数据库·后端·sql·mysql·postgresql·sqlserver