Las funciones de ventana (o window functions) en SQL son una poderosa herramienta que permite realizar cálculos sobre un conjunto de filas relacionadas con la fila actual. A diferencia de las funciones de agregación estándar, las funciones de ventana no agrupan los resultados en una sola fila, sino que mantienen el contexto de cada fila individual.

Conceptos Clave

  1. Partición: Divide el conjunto de resultados en subconjuntos. Las funciones de ventana se aplican a cada partición por separado.
  2. Orden: Define el orden en el que se procesan las filas dentro de cada partición.
  3. Frame: Especifica un subconjunto de filas dentro de la partición que se utilizará para la función de ventana.

Sintaxis Básica

<función_de_ventana> OVER (
    [PARTITION BY <expresiones_de_partición>]
    [ORDER BY <expresiones_de_orden>]
    [<frame_clause>]
)

Ejemplo de Sintaxis

SUM(sales) OVER (
    PARTITION BY region
    ORDER BY date
    ROWS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS running_total

Tipos Comunes de Funciones de Ventana

  1. Funciones de Agregación: SUM(), AVG(), MIN(), MAX(), COUNT()
  2. Funciones de Rango: RANK(), DENSE_RANK(), ROW_NUMBER()
  3. Funciones de Valor: FIRST_VALUE(), LAST_VALUE(), NTH_VALUE()

Ejemplos Prácticos

  1. Cálculo de Suma Acumulativa

SELECT
    date,
    sales,
    SUM(sales) OVER (
        ORDER BY date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_sales
FROM
    sales_data
ORDER BY
    date;

Explicación: Esta consulta calcula la suma acumulativa de las ventas ordenadas por fecha.

  1. Cálculo de Rango

SELECT
    employee_id,
    department,
    salary,
    RANK() OVER (
        PARTITION BY department
        ORDER BY salary DESC
    ) AS salary_rank
FROM
    employee_data;

Explicación: Esta consulta asigna un rango a cada empleado dentro de su departamento basado en su salario, en orden descendente.

  1. Valor de la Primera Fila en una Partición

SELECT
    employee_id,
    department,
    salary,
    FIRST_VALUE(salary) OVER (
        PARTITION BY department
        ORDER BY hire_date
    ) AS first_salary
FROM
    employee_data;

Explicación: Esta consulta obtiene el salario del primer empleado contratado en cada departamento.

Ejercicio Práctico

Ejercicio 1: Suma Acumulativa de Ventas

Instrucciones: Utiliza la tabla sales_data para calcular la suma acumulativa de las ventas por región y fecha.

SELECT
    region,
    date,
    sales,
    SUM(sales) OVER (
        PARTITION BY region
        ORDER BY date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_sales
FROM
    sales_data
ORDER BY
    region, date;

Ejercicio 2: Rango de Salarios

Instrucciones: Utiliza la tabla employee_data para calcular el rango de salarios dentro de cada departamento.

SELECT
    employee_id,
    department,
    salary,
    RANK() OVER (
        PARTITION BY department
        ORDER BY salary DESC
    ) AS salary_rank
FROM
    employee_data;

Soluciones

Solución al Ejercicio 1

SELECT
    region,
    date,
    sales,
    SUM(sales) OVER (
        PARTITION BY region
        ORDER BY date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS cumulative_sales
FROM
    sales_data
ORDER BY
    region, date;

Solución al Ejercicio 2

SELECT
    employee_id,
    department,
    salary,
    RANK() OVER (
        PARTITION BY department
        ORDER BY salary DESC
    ) AS salary_rank
FROM
    employee_data;

Conclusión

Las funciones de ventana en BigQuery permiten realizar cálculos avanzados y análisis detallados sin perder el contexto de cada fila individual. Al dominar estas funciones, puedes realizar análisis más complejos y obtener insights más profundos de tus datos. En el siguiente módulo, exploraremos los Joins Avanzados, que te permitirán combinar datos de múltiples tablas de manera eficiente.

Curso de BigQuery

Módulo 1: Introducción a BigQuery

Módulo 2: SQL Básico en BigQuery

Módulo 3: SQL Intermedio en BigQuery

Módulo 4: SQL Avanzado en BigQuery

Módulo 5: Gestión de Datos en BigQuery

Módulo 6: Optimización del Rendimiento de BigQuery

Módulo 7: Seguridad y Cumplimiento en BigQuery

Módulo 8: Integración y Automatización de BigQuery

Módulo 9: Machine Learning en BigQuery (BQML)

Módulo 10: Casos de Uso de BigQuery en el Mundo Real

© Copyright 2024. Todos los derechos reservados