Es lo que más voy a escuchar sobre todo en Analítica y Ciencia de Datos. Es una herramienta muy poderosa en DB Relacionales sobre todo en Postgre.
Es la relación entre un Row y el resto de Rows en una partición o window frame.
Window Frame = Una sección de la Tabla que me interesa medir y saber cuál es la relación que existe entre uno de los Rows y todo el resto de los Rows que se encuentran en la partición.
Las Window Function corren al final de casi todo, corren después de WHERE, HAVING, menos por ORDER BY.
EJEMPLO: Podemos medir según algún criterio:
PARA QUE SIRVEN:
SELECT *,
AVG(colegiatura) OVER (PARTITION BY carrera_id)
FROM platzi.alumnos;



D. Luego especifico de donde se sacarán los Datos.
E. Obtenemos la Colegiatura Promedio por Carrera, para todos los carrera_id 1 será el mismo, para carrera_id 2 será distinto, carrera_id 3 distinto, y así con todas las carreras.
¿Cuándo No le determino una partición que sucede? Toma como Partición o Window Frame toda la tabla. Para este ejemplo sacaría el promedio de toda la Columna Colegiatura sin importar la carrera_id. Saca un promedio general de todo el campo.
SELECT *,
AVG(colegiatura) OVER ()
FROM platzi.alumnos;

Qué pasa si en lugar de hacer una Partición, coloco un Order By dentro de la Window Function?
SELECT *,
SUM(colegiatura) OVER (ORDER BY colegiatura)
FROM platzi.alumnos;




Agrego al ejemplo 3, una Partición para que no sea de toda la Tabla sino por carrera_id
SELECT *,
SUM(colegiatura) OVER (PARTITION BY carrera_id ORDER BY colegiatura)
FROM platzi.alumnos;

Algunas funciones no necesitan OVER, pero otras si, como ROW_NUMBER, que la vimos anteriormente, y una función más, llamada RANK, que actúa como ROW_NUMBER, pero toma en cuenta los valores repetidos
Qué lugar ocupa algo en nuestra Tabla.
Si queremos hacer cosas más interesantes con RANK lo veremos en la siguiente clase Particiones y Agregaciones
SELECT *,
RANK() OVER (PARTITION BY carrera_id ORDER BY colegiatura DESC)
FROM platzi.alumnos;

Le asignamos un Alias y ordenamos primero por carrera_id y luego por la Window Function.