En el mundo de las bases de datos relacionales, el almacenamiento de datos en tablas SQL es común. En ocasiones, al extraer datos, necesitamos realizar manipulaciones, como calcular el percentil en SQL. Este artículo explora la función analítica PERCENT_RANK() de SQL Server, centrándose en su aplicación para calcular percentiles y proporciona ejemplos detallados de su uso.
Visión General de la Función PERCENT_RANK()
SQL Server ofrece diversas funciones analíticas, y PERCENT_RANK() es una de las más potentes para calcular el percentil en SQL. Entre las funciones relacionadas se encuentran CUME_DIST(), FIRST_VALUE(), LAST_VALUE(), LEAD(), LAG(), PERCENTILE_COUNT(), PERCENTILE_DISC(), y otras. Estas funciones permiten asignar rangos a cada fila en un conjunto de resultados mediante el uso de funciones de ventana.
Sintaxis de PERCENT_RANK()
La sintaxis básica de la función PERCENT_RANK() es la siguiente:
PERCENT_RANK() OVER ([PARTITION BY expresion_particion, ...] ORDER BY expresion_ordenamiento [ASC | DESC], ...)
PARTITION BY
: Opcional. Divide el conjunto de datos en conjuntos más pequeños.ORDER BY
: Obligatorio. Ordena los datos en orden ascendente o descendente.
Ejemplos Prácticos
Ejemplo 1: Calcular el Percentil de las Notas de Estudiantes
WITH Estudiante AS (
SELECT Notas FROM (VALUES(75), (59), (69), (88), (72), (86), (60), (67), (49), (81), (93)) Val(Notas)
), Percentiles AS (
SELECT Notas, PERCENT_RANK() OVER (ORDER BY Notas) AS Percent_Rank FROM Estudiante
)
SELECT * FROM Percentiles;
En este ejemplo, obtenemos el percentil de las notas de los estudiantes, mostrando valores entre 0 y 1.
Ejemplo 2: Manejar Valores Nulos
WITH Estudiante AS (
SELECT Notas FROM (VALUES(75), (59), (69), (88), (72), (86), (60), (67), (49), (81), (93), (NULL)) Val(Notas)
), Percentiles AS (
SELECT Notas, PERCENT_RANK() OVER (ORDER BY Notas) AS Percent_Rank FROM Estudiante
)
SELECT * FROM Percentiles;
Los valores nulos siempre obtienen un percentil de 0.
Ejemplo 3: Tratar Valores Duplicados
WITH Estudiante AS (
SELECT Notas FROM (VALUES(75), (59), (69), (88), (72), (86), (60), (67), (49), (81), (81), (93)) Val(Notas)
), Percentiles AS (
SELECT Notas, PERCENT_RANK() OVER (ORDER BY Notas) AS Percent_Rank FROM Estudiante
)
SELECT * FROM Percentiles;
Para valores duplicados, la función puede devolver el mismo o diferente rango.
Ejemplo 4: Orden Descendente
WITH Estudiante AS (
SELECT Notas FROM (VALUES(75), (59), (69), (88), (72), (86), (60), (67), (49), (81), (93)) Val(Notas)
), Percentiles AS (
SELECT Notas, PERCENT_RANK() OVER (ORDER BY Notas DESC) AS Percent_Rank FROM Estudiante
)
SELECT * FROM Percentiles;
Ordenando en forma descendente, las notas más altas obtienen un rango de 0 y las más bajas de 1.
Ejemplo 5: Utilizar la Clausula PARTITION BY
SELECT Departamento, Nombre, Salario, PERCENT_RANK() OVER (PARTITION BY Departamento ORDER BY Salario) AS PctRank
FROM HistorialDepartamentoEmpleado AS hde
INNER JOIN HistorialPagoEmpleado AS hpe ON hpe.IDEmpleado = hde.IDEmpleado
WHERE Departamento IN ('Ingeniería', 'Finanzas')
ORDER BY Departamento, Salario DESC;
Dividir los datos por departamento y calcular el percentil para los salarios.
Conclusión
En este artículo, exploramos a fondo la función PERCENT_RANK() de SQL Server para calcular percentiles. Esta función es esencial para entender el rango relativo de una fila dentro de un grupo de datos. Recuerde, PERCENT_RANK():
- Calcula el rango relativo de una fila dentro de un grupo.
- Utiliza la cláusula ORDER BY para ordenar los datos.
- Puede dividir datos utilizando PARTITION BY.
- Asigna un valor de 0 a los valores nulos.
Aprender esta función analítica de SQL Server es crucial para cualquier profesional que trabaje con bases de datos. ¡Consolide su conocimiento y utilice PERCENT_RANK() para obtener información valiosa de sus conjuntos de datos!