类别:

:doc:`/sql-reference/functions-window`(排名)

PERCENT_RANK

返回一组值中某个值的相对排名,此排名指定为介于 0.0 到 1.0 之间的百分比。

语法

PERCENT_RANK()
  OVER ( [ PARTITION BY <expr1> ] ORDER BY <expr2> [ { ASC | DESC } ] [ <fixedRangeFrame> ] )
Copy

其中:

fixedRangeFrame ::=
    {
       RANGE UNBOUNDED PRECEDING
     | RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
     | RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
    }
Copy

使用说明

  • expr1 指定作为分区依据的列(或表达式)。

    例如,假设在每个州或省内,您想按农民的玉米产量对他们进行排名。在这种情况下,您可以按州进行分区。

    如果您只需要一个群体(例如,您想对美国的所有农民进行排名,无论他们居住在哪个州),那么就省略 PARTITION BY 子句。

  • expr2 指定作为排名依据的列(或表达式)。

    例如,如果您对农民进行排名,看看谁的玉米产量(在他们所在的州内)更多,则应该使用 bushels_produced 列。有关详细信息,请参阅 `示例`_(本主题内容)。

  • PERCENT_RANK 计算公式为:

    如果 n 为 1:

    PERCENT_RANK = 0

    如果 n 大于 1:

    PERCENT_RANK = (r - 1) / (n - 1)

    其中,r 是该行的 RANKn 是窗口分区中的行数。

  • 值的范围从 0.0 到 1.0。您可以乘以 100 以得出真正的百分比。

  • PERCENT_RANK 仅支持固定边界且基于范围的窗口框架。有关窗口框架的更多信息(包括语法、使用说明和示例),请参阅 窗口函数的语法和用法

示例

SELECT
    exchange,
    symbol,
    PERCENT_RANK() OVER (PARTITION BY exchange ORDER BY price) AS percent_rank
  FROM trades;
Copy
+--------+------+------------+
|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|
+--------+------+------------+
语言: 中文