Categorias:

Funções de janela (classificação)

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 } ] [ <fixedRangeFrame> ] )
Copy

Onde:

fixedRangeFrame ::=
    {
       RANGE UNBOUNDED PRECEDING
     | 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 apenas quadros de janela baseados em intervalo com limites fixos. Para obter mais informações sobre quadros de janela, incluindo sintaxe, notas de uso e exemplos, consulte Sintaxe e uso da função de janela.

Exemplos

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|
+--------+------+------------+