根据窗口的 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