Introducción a las Funciones Analíticas

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;

Funciones Analíticas Comunes

  1. 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;
    
    
  2. 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;
    
    
  3. 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;
    
    
  4. 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;
    
    
  5. 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;
    
    

Funciones Agregadas

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.

  1. SUM(): Suma los valores de una columna.

    SELECT id_departamento, SUM(salario) AS total_salario
    FROM empleados
    GROUP BY id_departamento;
    
    
  2. AVG(): Calcula el promedio de los valores.

    SELECT id_departamento, AVG(salario) AS salario_promedio
    FROM empleados
    GROUP BY id_departamento;
    
    
  3. COUNT(): Cuenta el número de filas o valores.

    SELECT id_departamento, COUNT(*) AS numero_empleados
    FROM empleados
    GROUP BY id_departamento;
    
    
  4. 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;
    
    

Combinación de Funciones Analíticas y Agregadas

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.