De ventanaestándar SQL

PERCENT_RANK

Muestra la posición relativa de una fila de 0 a 1: qué proporción de las demás filas queda por delante.

Sintaxis

PERCENT_RANK() OVER (ORDER BY <criterio de orden>)
PERCENT_RANK() OVER (PARTITION BY <grupo> ORDER BY <criterio de orden>)

Calcula (puesto − 1) / (filas − 1): la primera en el orden recibe 0, y la última, 1. Útil para decir «gana más que el 75 % de sus compañeros». La parecida CUME_DIST calcula la proporción incluyendo la fila actual y nunca da 0.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

La posición relativa por salario
SELECT name, salary,
PERCENT_RANK() OVER (ORDER BY salary) AS percent_rank
FROM employees;
namesalarypercent_rank
Noah9500
Liam10000.25
Emma12000.5
Sophia12000.5
Olivia13501
En porcentaje
SELECT name, salary,
ROUND(PERCENT_RANK() OVER (ORDER BY salary) * 100) AS higher_than_percent
FROM employees;
namesalaryhigher_than_percent
Noah9500
Liam100025
Emma120050
Sophia120050
Olivia1350100

Emma y Sophia ganan más que el 50 % de sus compañeros, y Olivia, más que todos los demás.

Dentro de cada departamento
SELECT name, department, salary,
PERCENT_RANK() OVER (PARTITION BY department ORDER BY salary) AS rank_in_department
FROM employees;
namedepartmentsalaryrank_in_department
Liambackend10000
Emmabackend12001
Sophiadesign12000
Noahfrontend9500
Oliviafrontend13501

En el departamento de una sola persona —design— el resultado es 0: no hay con quién comparar.

Ten en cuenta

El resultado es una fracción de 0 a 1, no un porcentaje. Para el porcentaje, multiplica por 100.

Los valores iguales reciben el mismo resultado, así que varias personas pueden tener 0.5 a la vez.

Para una sola fila el resultado es 0: no hay entre qué dividir.

Funciones relacionadas

Más detalles en el curso