Las funciones analíticas son una poderosa herramienta en Oracle SQL que permite realizar cálculos avanzados y detallados dentro de un conjunto de filas. Estas funciones se utilizan ampliamente para análisis de datos y generación de informes que requieren información detallada como acumulados, promedios móviles, rankings, diferencias entre filas y mucho más.
Ejemplo básico de función analítica:
SELECT nombre, salario, SUM(salario) OVER (PARTITION BY id_departamento) AS total_departamento
FROM empleados;
SUM(salario) OVER (PARTITION BY id_departamento) calcula el total de salarios por departamento.OVER define el rango de filas para la operación.ROW_NUMBER(): Asigna un número único y secuencial a cada fila dentro de una partición. Es útil para identificar filas específicas o eliminar duplicados.
SELECT nombre, salario, ROW_NUMBER() OVER (PARTITION BY id_departamento ORDER BY salario DESC) AS numero_fila
FROM empleados;
RANK(): Asigna un rango a las filas dentro de una partición, permitiendo empates. Las filas empatadas recibirán el mismo rango, pero el siguiente rango se saltará.
SELECT nombre, salario, RANK() OVER (ORDER BY salario DESC) AS rango
FROM empleados;
DENSE_RANK(): Similar a RANK(), pero no deja huecos en los rangos cuando hay empates.
SELECT nombre, salario, DENSE_RANK() OVER (ORDER BY salario DESC) AS rango_denso
FROM empleados;
NTILE(n): Divide el conjunto de resultados en n grupos iguales o casi iguales, asignando un número de grupo a cada fila.
SELECT nombre, salario, NTILE(4) OVER (ORDER BY salario DESC) AS cuartil
FROM empleados;
LAG() y LEAD(): Permiten acceder a valores de filas anteriores (LAG) o posteriores (LEAD) dentro de una partición.
SELECT nombre, salario,
LAG(salario) OVER (ORDER BY salario DESC) AS salario_anterior,
LEAD(salario) OVER (ORDER BY salario DESC) AS salario_siguiente
FROM empleados;
Las funciones agregadas calculan un valor único a partir de un conjunto de filas y son muy comunes en agrupaciones (GROUP BY). Estas funciones también se pueden usar en combinación con funciones analíticas para proporcionar una perspectiva más detallada de los datos.
SUM(): Suma los valores de una columna.
SELECT id_departamento, SUM(salario) AS total_salario
FROM empleados
GROUP BY id_departamento;
AVG(): Calcula el promedio de los valores.
SELECT id_departamento, AVG(salario) AS salario_promedio
FROM empleados
GROUP BY id_departamento;
COUNT(): Cuenta el número de filas o valores.
SELECT id_departamento, COUNT(*) AS numero_empleados
FROM empleados
GROUP BY id_departamento;
MAX() y MIN(): Encuentran el valor máximo o mínimo en una columna.
SELECT id_departamento, MAX(salario) AS salario_maximo, MIN(salario) AS salario_minimo
FROM empleados
GROUP BY id_departamento;
Una de las características más poderosas de Oracle SQL es la capacidad de combinar funciones analíticas y agregadas para realizar análisis avanzados en un solo paso.