No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Window functions

24/34
Recursos

Aportes 40

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

No sé por qué a Platzi le cuesta tanto que sus explicaciones sean interactivas. Todo lo que dice Israel es correcto, pero en ves de tratar de explicarlo todo con palabras, deberían cambiar esa diapositiva con la palabra Ranking y poner una imagen que muestre el concepto explicado, por ejemplo:

sí, ya se que podemos hacer nuestra propia búsqueda en internet para “profundizar” (de hecho, eso me tocó hacer con este tema de las window functions en cursos pasados y con otros muchos temas) pero la idea de pagar Platzi es para que estos conceptos queden claros con las explicaciones dadas en estas clases.


Y sí, ya se que más adelante se explicará mejor esto, pero si el concepto no queda claro en esta clase podría decirse que es tiempo perdido esta clase.

Enviaré el correo para que Platzi sugiriendo este tema de ilustración y que analice la idea de contratar animadores graficos que trabajen con los profesores de los cursos para que en clases como esta pueda realizar animaciones en la digitacion del query, su resultado, como cambian los valores, los diagramas entidad relacion etc…creo que haria mas intuitivas las clases,

Bueno como nadie dijo nada, hello world!

PostgreSQL window function List

  • Las window function se ocupan para entender la relación que guarda un registro en particular con respecto al resto del dataset, ya sea una tabla, una partición o un query.
  • Generalmente se encargan de hacer rankings

https://www.postgresql.org/docs/12/functions-window.html

Les comparto este articulo muy bueno de Towards data science que explica paso a paso las window functions
https://towardsdatascience.com/a-guide-to-advanced-sql-window-functions-f63f2642cbf9

Antes de ver esta clase, les recomiendo ir al curso “Curso Practico de SQL” y tomar la clase 27 y 28: “Windows Functions” y “Particiones y agregaciones” respectivamente.

El curso empezó bien pero se fue al tacho desde la mitad en adelante. No se ilustran los conceptos y a fin de cuentas se tiene un noción muy básica del sistema, de 'data science' no tiene mucho

Creo que entiendo el concepto, pero me hubiera gustado ver algunas imágenes para enriquecer un poco la explicación.

24. Window functions

  • Ranking

Las Window Functions (funciones de ventana) son una característica avanzada en SQL que permite realizar cálculos y operaciones en un conjunto de filas relacionadas dentro de una consulta, sin afectar el resultado general de la consulta.

Las Window Functions proporcionan un mecanismo para realizar operaciones de agregación, cálculos de rangos y clasificaciones en un conjunto de filas definido por una ventana (window) en lugar de en todo el conjunto de resultados de la consulta.

Algunos ejemplos de Window Functions son:

  1. Funciones de agregación: Puedes calcular sumas, promedios, valores máximos o mínimos, entre otros, en un conjunto de filas definido por una ventana. Por ejemplo, puedes calcular la suma acumulativa de ventas por mes para cada producto en una tabla.
  2. Funciones de clasificación y ranking: Puedes asignar clasificaciones o rankings a las filas basadas en un criterio específico dentro de una ventana. Por ejemplo, puedes determinar el ranking de los mejores vendedores por región en función de sus ventas.
  3. Funciones de desplazamiento: Puedes acceder a los valores de filas anteriores o siguientes dentro de una ventana. Por ejemplo, puedes calcular la diferencia entre el valor actual y el valor anterior en una serie temporal.

Las Window Functions se utilizan en combinación con la cláusula OVER, que define la ventana sobre la cual se aplicarán las operaciones. La cláusula OVER especifica la partición de filas y el ordenamiento dentro de la ventana.

Las Window Functions son especialmente útiles cuando se requiere realizar cálculos complejos en un conjunto de filas relacionadas sin la necesidad de realizar subconsultas o joins adicionales. Proporcionan una forma más eficiente y elegante de realizar este tipo de operaciones en SQL.

Es importante destacar que las Window Functions no están disponibles en todos los sistemas de bases de datos, por lo que su disponibilidad puede depender del motor de base de datos que estés utilizando.

Me gustan las clases del profesor israel, pero esta mi nivel de confusión a subido a otro nivel.
Creo se pudieron realizar mas ejemplos o representaciones graficas que permitan entender mejor el tema.

Esta clase puede ser mejor!
Esta parte sino la entienden es porque no vieron el curso Practico de SQL, por eso seria mejor q revisen ese curso y no se salteen.

No pierdan tiempo en tratar de entender este video y vayan a: https://platzi.com/clases/2059-practico-sql/33013-window-functions/

En el curso de SQL práctico aquí en Platzi, con el mismo profesor, se realizan muchos ejemplos utilizando Windows Functions, lo cual ayuda a entenderlo mejor. <https://platzi.com/cursos/practico-sql/>

Chicos para mas detalle esta clase les recomiendo ver esta clase: https://platzi.com/clases/2059-practico-sql/33013-window-functions/

Se hace necesario en esta clase en particular un ejemplo practico, mucha teoría hace que no se apropie el concepto general de lo que expone el profesor, además hace que se vea poco importante

Hacer una relación de una fila con las demás, ese concepto así es duro de dirigir.
Me quedo mas claro cuando se dice el tema de un ranking, que es un tipo de relación de una fila con las otras.

Las **window functions** en SQL son una herramienta poderosa que permite realizar cálculos sobre un conjunto de filas relacionadas con la fila actual. A diferencia de las funciones de agregación tradicionales, **no agrupan los resultados** en una sola fila; en su lugar, cada fila conserva su identidad y el resultado del cálculo se agrega como una nueva columna. ## **Características principales de las window functions** 1. Se calculan sobre un conjunto definido de filas, conocido como la *ventana*. 2. No reducen el número de filas del resultado. 3. Utilizan la cláusula `OVER` para definir la ventana. 4. Son ideales para cálculos como promedios móviles, rankings, y acumulativos. ### **1. Sintaxis general** función(\[parámetros]) OVER ( \[PARTITION BY columna1, columna2] \[ORDER BY columna3 ASC|DESC] \[ROWS | RANGE especificación] ) #### Componentes: * `función`: Es la función que se aplicará, como `SUM`, `AVG`, `ROW_NUMBER`, etc. * `PARTITION BY` *(opcional)*: Divide las filas en subconjuntos dentro de la ventana. * `ORDER BY` *(opcional)*: Ordena las filas dentro de cada partición antes de aplicar la función. * `ROWS | RANGE` *(opcional)*: Especifica el marco de filas dentro de la ventana, como un rango o un número fijo de filas. ### **2. Ejemplos comunes de funciones de ventana** #### **a) ROW\_NUMBER**: Enumerar filas Genera un número secuencial para cada fila en una partición. SELECT nombre, salario, ROW\_NUMBER() OVER (PARTITION BY departamento ORDER BY salario DESC) AS ranking FROM empleados; **Resultado**: Enumera los empleados dentro de cada departamento según su salario. #### **b) RANK y DENSE\_RANK**: Rankings con manejo de empates * `RANK`: Asigna el mismo rango a valores empatados y deja un "salto" en el siguiente rango. * `DENSE_RANK`: No deja saltos en el rango. SELECT nombre, salario, RANK() OVER (ORDER BY salario DESC) AS rank, DENSE\_RANK() OVER (ORDER BY salario DESC) AS dense\_rank FROM empleados; #### **c) SUM y AVG**: Totales y promedios acumulativos Se calculan acumulativos o por ventana definida. SELECT nombre, departamento, salario, SUM(salario) OVER (PARTITION BY departamento) AS total\_departamento, AVG(salario) OVER (PARTITION BY departamento) AS promedio\_departamento FROM empleados; **Resultado**: Calcula el total y el promedio de salarios por departamento. #### **d) LAG y LEAD**: Acceder a filas previas o siguientes Permite acceder a los valores de otras filas relacionadas. SELECT nombre, salario, LAG(salario) OVER (ORDER BY salario) AS salario\_anterior, LEAD(salario) OVER (ORDER BY salario) AS salario\_siguiente FROM empleados; #### **e) NTILE**: Dividir datos en grupos Divide las filas en un número especificado de grupos aproximadamente iguales. SELECT nombre, salario, NTILE(4) OVER (ORDER BY salario DESC) AS grupo FROM empleados; **Resultado**: Divide los empleados en 4 grupos según su salario. ### **3. Especificar marcos con ROWS y RANGE** Puedes usar `ROWS` o `RANGE` para definir marcos de filas más precisos. #### **a) Calcular un promedio móvil de 3 filas anteriores** SELECT nombre, salario, AVG(salario) OVER (ORDER BY salario ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS promedio\_movil FROM empleados; #### **b) Usar RANGE para definir un rango basado en valores** SELECT nombre, salario, SUM(salario) OVER (ORDER BY salario RANGE BETWEEN 5000 PRECEDING AND CURRENT ROW) AS total\_rango FROM empleados; ### **4. Ejemplo práctico: Ventas acumuladas** Supongamos que tienes una tabla de `ventas` y quieres calcular las ventas acumulativas por región y mes. WITH datos\_ventas AS ( SELECT region, mes, SUM(total) AS total\_mensual FROM ventas GROUP BY region, mes ) SELECT region, mes, total\_mensual, SUM(total\_mensual) OVER (PARTITION BY region ORDER BY mes) AS ventas\_acumuladas FROM datos\_ventas; ### **5. Ventajas de las window functions** 1. **Flexibilidad**: Puedes realizar cálculos avanzados sin perder el detalle de las filas. 2. **Legibilidad**: Hacen que las consultas sean más limpias y fáciles de entender. 3. **Potencia**: Ideal para rankings, promedios móviles, y cálculos acumulativos. ### **6. Limitaciones** * Las funciones de ventana pueden ser intensivas en recursos, especialmente en tablas grandes con muchas particiones. * Su rendimiento puede depender del diseño de los índices y del tamaño de los datos.
Las window functions en PostgreSQL permiten realizar cálculos sobre un conjunto de filas relacionadas, sin necesidad de agrupar los datos. Por ejemplo, si tienes una tabla de ventas y quieres calcular el total de ventas por cada vendedor, pero también mostrar las ventas individuales, usarías la función `SUM()` como window function: ```sql SELECT vendedor, venta, SUM(venta) OVER (PARTITION BY vendedor) AS total_ventas FROM ventas; ``` Esto te dará una lista con cada venta y el total de ventas de cada vendedor en la misma fila, facilitando el análisis sin perder el contexto de cada registro.
Creo que deberia empezar diciendo que los ejemplos los veremos mas adelante.
**No entiendo porque no usan el tiempo del video y usar diagramas, flujos, algo que explique mejor lo que dice el facilitador**

a ya, no entendí 😃

Las funciones de ventana permiten realizar cálculos sobre un conjunto de filas relacionadas en una consulta, sin necesidad de agrupar los datos

SELECT 
    c.nombre AS categoria,
    p.titulo AS pelicula,
    p.duracion AS duracion_pelicula,
    AVG(p.duracion) OVER (PARTITION BY c.categoria_id) AS promedio_duracion_categoria
FROM 
    public.peliculas p
JOIN 
    public.peliculas_categorias pc ON p.pelicula_id = pc.pelicula_id
JOIN 
    public.categorias c ON pc.categoria_id = c.categoria_id;

Tal vez está estructura haga un poco más clara la sintaxis de una window function

SELECT	
		RANK() OVER (PARTITION BY department ORDER BY salary DESC) 
			AS dept_ranking,
		department,
		employee_id, 
		full_name, 
		salary
FROM employee;

Ami me gustó mucho este articulo y me ayudó a entenderlas un montón, esta en inglés pero nada que el traductor no haga 😉

Esta clase esta un poco perdida , les recomiendo ir a CURSO PRACTICO DE SQL donde explico esto de manera clara , específicamente en la ultima clase

Hice esta consulta a modo de Window Function.

SELECT titulo, duracion, (SELECT AVG(duracion) FROM peliculas) AS promedio, duracion - (SELECT AVG(duracion) FROM peliculas) AS diferencia
FROM peliculas
GROUP BY titulo, duracion
ORDER BY duracion DESC;

El esta dando un repaso de lo que ya vimos en otro curso además acabo de decir que vamos a profundizar en el tema mas adelante

muy interesante el curso en general

Dense Rank

Percentile Rank

rango

Row number

Ranking

A ponerlo en práctica

Con los ejemplos me imagino que quedará más clara está función dirigida a Rankings y sus relaciones.
Incluyo enlace para profundizar en este concepto:

Ya quiero verlo en el proyecto.

Te haré compañia jajajaja

Excelente

“El término ventana describe el conjunto de filas en las que opera la función de ventana. Una función de ventana devuelve valores de las filas de una ventana ".