- 类别:
窗口函数 (排名相关、窗口框架)
PERCENT_RANK¶
返回一组值中某个值的相对排名,此排名指定为介于 0.0 到 1.0 之间的百分比。
语法¶
PERCENT_RANK() OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <cumulativeRangeFrame> ] )
其中:
cumulativeRangeFrame ::= { RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW | RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING }
使用说明¶
expr1
指定作为分区依据的列(或表达式)。例如,假设在每个州或省内,您想按农民的玉米产量对他们进行排名。在这种情况下,您可以按州进行分区。
如果您只需要一个群体(例如,您想对美国的所有农民进行排名,无论他们居住在哪个州),那么就省略
PARTITION BY
子句。expr2
指定作为排名依据的列(或表达式)。例如,如果您对农民进行排名,看看谁的玉米产量(在他们所在的州内)更多,则应该使用
bushels_produced
列。有关详细信息,请参阅 示例 (本主题内容)。PERCENT_RANK 计算公式为:
值的范围从 0.0 到 1.0。您可以乘以 100 以得出真正的百分比。
PERCENT_RANK 支持基于范围的累积 窗口框架,但不支持其他类型的窗口框架。有关基于范围的累积窗口框架语法的更多信息,请参阅 窗口框架语法和用法。
示例¶
SELECT
exchange,
symbol,
PERCENT_RANK() OVER (PARTITION BY exchange ORDER BY price) AS percent_rank
FROM trades;
+--------+------+------------+
|exchange|symbol|PERCENT_RANK|
+--------+------+------------+
|C |SPY | 0.0|
|C |AAPL | 0.5|
|C |AAPL | 1.0|
|N |YHOO | 0.0|
|N |QQQ | 0.2|
|N |QQQ | 0.4|
|N |SPY | 0.6|
|N |SPY | 0.6|
|N |AAPL | 1.0|
|Q |YHOO | 0.0|
|Q |YHOO | 0.2|
|Q |MSFT | 0.4|
|Q |MSFT | 0.6|
|Q |QQQ | 0.8|
|Q |QQQ | 1.0|
|P |YHOO | 0.0|
|P |MSFT | 0.25|
|P |MSFT | 0.5|
|P |SPY | 0.75|
|P |AAPL | 1.0|
+--------+------+------------+