Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Tipos de Funciones de Ventana | Algunos Temas Adicionales
Técnicas Avanzadas en SQL

bookTipos de Funciones de Ventana

Exploremos brevemente los principales tipos de funciones de ventana que se utilizan en SQL.

Funciones de agregación

Estas son las funciones de agregación estándar (AVG, SUM, MAX, MIN, COUNT) utilizadas en un contexto de ventana. Ya hemos utilizado este tipo de función de ventana en el capítulo anterior.

Funciones de ranking

Las funciones de ranking en SQL son un tipo de función de ventana que permite asignar un rango a cada fila dentro de una partición de un conjunto de resultados. Estas funciones pueden ser extremadamente útiles para realizar cálculos y análisis ordenados.

  • RANK(): Asigna un rango único a cada fila distinta dentro de la partición según la cláusula ORDER BY. Las filas con valores iguales reciben el mismo rango, dejando huecos en la secuencia de rangos;

  • DENSE_RANK(): Similar a RANK(), pero sin huecos en la secuencia de rangos;

  • NTILE(n): Divide las filas en una partición ordenada en n grupos y asigna un número de grupo a cada fila.

Ejemplo

Clasificaremos las ventas según el Amount para cada ProductID en orden ascendente utilizando la función DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

La tabla de resultados contiene toda la información de la tabla principal y una columna adicional que proporciona el rango de cada venta para el producto en particular.

Funciones de comparación de valores

Las funciones de comparación de valores en ventanas en SQL se utilizan para comparar valores en la fila actual con valores en otras filas dentro de la misma partición.
Estas funciones son especialmente útiles para tareas que implican analizar tendencias, realizar cálculos basados en filas adyacentes o acceder a valores específicos de filas dentro de una ventana definida. Existen varias funciones de comparación de valores en SQL:

  • LAG(): Recupera el valor de una fila anterior en el conjunto de resultados sin necesidad de un self-join;
  • LEAD(): Recupera el valor de una fila posterior en el conjunto de resultados sin necesidad de un self-join;
  • FIRST_VALUE(): Devuelve el valor de la primera fila en el marco de la ventana;
  • LAST_VALUE(): Devuelve el valor de la última fila en el marco de la ventana.

Ejemplo

Utilicemos la función de comparación de valores de ventana LAG() para calcular el cambio en el monto de ventas respecto a la venta anterior para cada producto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Como resultado, podemos extraer fácilmente información sobre las diferencias de ventas para cada producto en particular sin utilizar subconsultas ni procedimientos almacenados.
También podemos calcular las diferencias para todas las ventas sin particionar utilizando la siguiente consulta:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Puedes observar que no incluimos la cláusula PARTITION BY en el bloque OVER. Esto significa que no queremos obtener los valores anteriores solo para un producto en particular, sino para todas las ventas en la tabla.

question mark

¿Qué hace la función 'NTILE()' en SQL?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4.35

bookTipos de Funciones de Ventana

Desliza para mostrar el menú

Exploremos brevemente los principales tipos de funciones de ventana que se utilizan en SQL.

Funciones de agregación

Estas son las funciones de agregación estándar (AVG, SUM, MAX, MIN, COUNT) utilizadas en un contexto de ventana. Ya hemos utilizado este tipo de función de ventana en el capítulo anterior.

Funciones de ranking

Las funciones de ranking en SQL son un tipo de función de ventana que permite asignar un rango a cada fila dentro de una partición de un conjunto de resultados. Estas funciones pueden ser extremadamente útiles para realizar cálculos y análisis ordenados.

  • RANK(): Asigna un rango único a cada fila distinta dentro de la partición según la cláusula ORDER BY. Las filas con valores iguales reciben el mismo rango, dejando huecos en la secuencia de rangos;

  • DENSE_RANK(): Similar a RANK(), pero sin huecos en la secuencia de rangos;

  • NTILE(n): Divide las filas en una partición ordenada en n grupos y asigna un número de grupo a cada fila.

Ejemplo

Clasificaremos las ventas según el Amount para cada ProductID en orden ascendente utilizando la función DENSE_RANK():

12345678
SELECT sales_id, product_id, sales_date, amount, DENSE_RANK() OVER (PARTITION BY product_id ORDER BY amount DESC) AS dense_rank_amount FROM Sales;
copy

La tabla de resultados contiene toda la información de la tabla principal y una columna adicional que proporciona el rango de cada venta para el producto en particular.

Funciones de comparación de valores

Las funciones de comparación de valores en ventanas en SQL se utilizan para comparar valores en la fila actual con valores en otras filas dentro de la misma partición.
Estas funciones son especialmente útiles para tareas que implican analizar tendencias, realizar cálculos basados en filas adyacentes o acceder a valores específicos de filas dentro de una ventana definida. Existen varias funciones de comparación de valores en SQL:

  • LAG(): Recupera el valor de una fila anterior en el conjunto de resultados sin necesidad de un self-join;
  • LEAD(): Recupera el valor de una fila posterior en el conjunto de resultados sin necesidad de un self-join;
  • FIRST_VALUE(): Devuelve el valor de la primera fila en el marco de la ventana;
  • LAST_VALUE(): Devuelve el valor de la última fila en el marco de la ventana.

Ejemplo

Utilicemos la función de comparación de valores de ventana LAG() para calcular el cambio en el monto de ventas respecto a la venta anterior para cada producto:

1234567891011
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (PARTITION BY product_id ORDER BY sales_date) AS amount_change FROM Sales ORDER BY product_id, sales_date;
copy

Como resultado, podemos extraer fácilmente información sobre las diferencias de ventas para cada producto en particular sin utilizar subconsultas ni procedimientos almacenados.
También podemos calcular las diferencias para todas las ventas sin particionar utilizando la siguiente consulta:

123456789
SELECT sales_id, product_id, sales_date, amount, LAG(amount, 1) OVER (ORDER BY sales_date) AS previous_amount, amount - LAG(amount, 1) OVER (ORDER BY sales_date) AS amount_change FROM Sales;
copy

Puedes observar que no incluimos la cláusula PARTITION BY en el bloque OVER. Esto significa que no queremos obtener los valores anteriores solo para un producto en particular, sino para todas las ventas en la tabla.

question mark

¿Qué hace la función 'NTILE()' en SQL?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4
some-alt