类别:

窗口函数 (排名相关、窗口框架)

PERCENT_RANK

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

语法

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

其中:

cumulativeRangeFrame ::=
    {
       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;

+--------+------+------------+
|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|
+--------+------+------------+
Copy
语言: 中文