Categorias:

Funções de janela (Relacionada à classificação, Quadro de janela)

PERCENT_RANK

Retorna a classificação relativa de um valor dentro de um grupo de valores, especificado como uma porcentagem que varia de 0,0 a 1,0.

Sintaxe

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

Onde:

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

Notas de uso

  • expr1 especifica a coluna (ou expressão) para divisão.

    Por exemplo, suponha que dentro de cada estado ou província, você queira classificar os agricultores em ordem pela quantidade de milho que eles produziram. Neste caso, você divide por estado.

    Se você quiser apenas um único grupo (por exemplo, você quer classificar todos os agricultores nos EUA independentemente do estado em que eles vivem), então omita a cláusula PARTITION BY.

  • expr2 especifica a coluna (ou expressão) pela qual você quer fazer a classificação.

    Por exemplo, se você estiver classificando os agricultores para ver quem produziu mais milho (dentro de seu estado), então você usaria a coluna bushels_produced. Para obter mais detalhes, consulte Exemplos (neste tópico).

  • PERCENT_RANK é calculado como:

    Se n for 1:

    PERCENT_RANK = 0

    Se n for maior que 1:

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

    onde r é o RANK da linha e n é o número de linhas na partição da janela.

  • Os valores variam de 0,0 a 1,0. Você pode multiplicar por 100 para obter uma porcentagem verdadeira.

  • PERCENT_RANK oferece suporte a quadros de janelas cumulativos com base no intervalo, mas não outros tipos de quadros de janela. Para obter mais informações sobre a sintaxe dos quadros de janelas cumulativos com base no intervalo, consulte Sintaxe e utilização do quadro de janela.

Exemplos

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