与 PERCENT 函数类似,PERCENT_RANK 函数为窗口的 ORDER BY 子句所指定列中的值返回秩,但以介于 0 和 1 之间的小数形式表示,计算方法为 (RANK - 1)/(- 1)。
随着窗口在输入行中向下移动,会计算在窗口的 ORDER BY 子句中所指定的表达式的秩。当 ORDER BY 子句包括多个表达式时,若第一个表达式与相邻行具有相同值,则第二个及后续表达式将用于区分并列情况。NULL 值排在任何其它值的前面(在升序序列中)。
以下示例返回按性别显示 New York 雇员薪水排位的结果集。该结果使用百分比数按降序列出排位并按性别分区。
SELECT DepartmentID, Surname, Salary, Sex, PERCENT_RANK( ) OVER ( PARTITION BY Sex ORDER BY Salary DESC ) AS PctRank FROM Employees WHERE State IN ( 'NY' ); |
此查询会返回以下结果:
DepartmentID | Surname | Salary | Sex | PctRank | |
---|---|---|---|---|---|
1 | 200 | Martel | 55700.000 | M | 0.0 |
2 | 100 | Guevara | 42998.000 | M | 0.333333333 |
3 | 100 | Soo | 39075.000 | M | 0.666666667 |
4 | 400 | Ahmed | 34992.000 | M | 1.0 |
5 | 300 | Davidson | 57090.000 | F | 0.0 |
6 | 400 | Blaikie | 54900.000 | F | 0.333333333 |
7 | 100 | Whitney | 45700.000 | F | 0.666666667 |
8 | 400 | Wetherby | 35745.000 | F | 1.0 |
由于按性别 (Sex) 划分输入,所以分别对男雇员和女雇员执行 PERCENT_RANK 计算。
以下示例返回 Utah 和 Arizona 的一些女雇员的列表并根据薪水以降序顺序排列她们。这里的 PERCENT_RANK 函数用于以降序顺序提供累计总数。
SELECT Surname, Salary, PERCENT_RANK ( ) OVER ( ORDER BY Salary DESC ) "Rank" FROM Employees WHERE State IN ( 'UT', 'AZ' ) AND Sex IN ( 'F' ); |
此查询会返回以下结果:
Surname | Salary | Rank | |
---|---|---|---|
1 | Shishov | 72995.00 | 0 |
2 | Jordan | 51432.00 | 0.25 |
3 | Hildebrand | 45829.00 | 0.5 |
4 | Bigelow | 31200.00 | 0.75 |
5 | Bertrand | 29800.00 | 1 |
您可以使用 PERCENT_RANK 在数据集中查找最高或最低的百分点。在以下示例中,查询会返回其薪水在数据集的最高的五个百分点之内的男雇员。
SELECT * FROM ( SELECT Surname, Salary, PERCENT_RANK ( ) OVER ( ORDER BY Salary DESC ) "Rank" FROM Employees WHERE Sex IN ( 'M' ) ) AS DerivedTable ( Surname, Salary, Percent ) WHERE Percent < 0.05; |
此查询会返回以下结果:
Surname | Salary | Percent | |
---|---|---|---|
1 | Scott | 96300.00 | 0 |
2 | Sheffield | 87900.00 | 0.025 |
3 | Lull | 87900.00 | 0.025 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |