Sobes.tech
Middle

¿Para qué se utilizan las funciones de ventana en SQL?

sobes.tech AI

Respuesta de la IA

Las funciones de ventana en SQL realizan agregaciones de datos en un conjunto de filas relacionadas con la fila actual, pero sin agrupar el conjunto de resultados. Esto permite realizar cálculos como sumas acumulativas, medias móviles o ranking, manteniendo todas las filas de la consulta original.

Los principales objetivos del uso de funciones de ventana:

  • Ranking: Asignar un rango a cada fila en una ventana determinada.
    -- Obtenemos el rango de empleados por salario dentro de cada departamento
    SELECT
        employee_name,
        salary,
        department,
        RANK() OVER (PARTITION BY department ORDER BY salary DESC) as department_rank
    FROM
        employees;
    
  • Cálculo de estadísticas por grupo de filas sin agrupación: Agregación de datos dentro de una "ventana" de filas, manteniendo la granularidad a nivel de fila.
    -- Calculamos el salario medio por todo el departamento para cada fila
    SELECT
        employee_name,
        salary,
        department,
        AVG(salary) OVER (PARTITION BY department) as avg_department_salary
    FROM
        employees;
    
  • Comparación de la fila actual con otras filas en la ventana: Acceso a datos de filas anteriores o posteriores en la ventana.
    -- Obtenemos el salario del empleado anterior en el departamento en orden descendente de salario
    SELECT
        employee_name,
        salary,
        department,
        LAG(salary, 1, 0) OVER (PARTITION BY department ORDER BY salary DESC) as previous_salary
    FROM
        employees;
    
  • Cálculos con suma acumulada: Cálculo de sumas, medias y otras agregaciones en un acumulado creciente.
    -- Calculamos la suma acumulada de ventas por fecha
    SELECT
        sale_date,
        amount,
        SUM(amount) OVER (ORDER BY sale_date) as cumulative_sales
    FROM
        sales;
    

A diferencia de las funciones de agregación normales (GROUP BY), las funciones de ventana no colapsan filas, lo que las convierte en una herramienta poderosa para consultas analíticas y análisis detallado de datos.