您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

PERCENT_RANK 函数(窗口)

根据窗口的 ORDER BY 规范,计算小于或大于当前值的值的百分比。

语法

PERCENT_RANK() 

语法元素

定义函数运行的数据窗口。对于 ,请参阅窗口函数和窗口规范。

描述

对于结果集中行组中的任何行,PERCENT_RANK 会根据窗口的 ORDER BY 规范计算小于或大于当前值的值的百分比。

根据 ORDER BY 子句中的排序顺序(ASC 或 DESC)的定义,PERCENT_RANK 返回从 0 开始并以 1 结尾的(分数)整数。

行 R 的相对排名定义为 (RANK()-1)/(NR-1),其中 NR 定义为 R 窗口分区中的行数。

示例

在此示例中,行按 ProdName 分区,为每个产品名称创建一组行。对于每一行,PERCENT_RANK 列以百分比形式表示该行的销售额值的排名。具体来说,由于指定了 ORDER BY (Sales ASC),PERCENT_RANK 返回同一组中值较低的百分比。

CREATE ROW TABLE ProductSales(ProdName VARCHAR(50), Type VARCHAR(20), Sales INT);

INSERT INTO ProductSales VALUES('Tee Shirt','Plain',21);

INSERT INTO ProductSales VALUES('Tee Shirt','Lettered',22);

INSERT INTO ProductSales VALUES('Tee Shirt','Team logo',30);

INSERT INTO ProductSales VALUES('Hoodie','Plain',60);

INSERT INTO ProductSales VALUES('Hoodie','Lettered',65);

INSERT INTO ProductSales VALUES('Hoodie','Team logo',80);

INSERT INTO ProductSales VALUES('Hoodie','Vintage',67);

INSERT INTO ProductSales VALUES('Ballcap','Plain',8);

INSERT INTO ProductSales VALUES('Ballcap','Lettered',40);

INSERT INTO ProductSales VALUES('Ballcap','Team logo',27);

SELECT ProdName, Type, Sales,

PERCENT_RANK() OVER (PARTITION BY ProdName ORDER BY Sales ASC) AS Percent_Rank

FROM ProductSales

ORDER BY Sales DESC;

PRODNAME类型销售PERCENT_RANK胡迪团队徽标801胡迪复古节670.6666666666666666胡迪Lettered650.33333333333333胡迪无格式600BallcapLettered401Tee 衬衫团队徽标301Ballcap团队徽标270.5Tee 衬衫Lettered220.5Tee 衬衫无格式210Ballcap无格式80 