- 类别:
:doc:`/sql-reference/functions-window`(排名)
PERCENT_RANK¶
返回一组值中某个值的相对排名,此排名指定为介于 0.0 到 1.0 之间的百分比。
语法¶
PERCENT_RANK()
OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <fixedRangeFrame> ] )
其中:
fixedRangeFrame ::= { RANGE UNBOUNDED PRECEDING | 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|
+--------+------+------------+