CursosEmpresasBlogLiveConfPrecios

Window functions

Clase 27 de 29 • Curso Práctico de SQL

Clase anteriorSiguiente clase

Contenido del curso

Introducción a SQL

  • 1
    Breve historia de SQL

    Breve historia de SQL

    06:03 min
  • 2
    Álgebra relacional

    Álgebra relacional

    07:05 min
  • 3

    Instalación de la BD de ejemplo

    01:28 min
  • 4
    Qué es una proyección (SELECT)

    Qué es una proyección (SELECT)

    06:14 min
  • 5
    Origen (FROM)

    Origen (FROM)

    08:41 min
  • 6
    Productos cartesianos (JOIN)

    Productos cartesianos (JOIN)

    10:36 min
  • 7
    Selección (WHERE)

    Selección (WHERE)

    11:50 min
  • 8
    Ordenamiento (ORDER BY)

    Ordenamiento (ORDER BY)

    07:57 min
  • 9
    Agregación y limitantes (GROUP BY y LIMIT)

    Agregación y limitantes (GROUP BY y LIMIT)

    09:09 min

Ejercitando tu SQL

  • 10
    El primero

    El primero

    11:05 min
  • 11
    El segundo más alto

    El segundo más alto

    16:25 min
  • 12
    Seleccionar de un set de opciones

    Seleccionar de un set de opciones

    11:16 min
  • 13
    En mis tiempos

    En mis tiempos

    09:50 min
  • 14
    Seleccionar por año

    Seleccionar por año

    08:13 min
  • 15
    Duplicados

    Duplicados

    13:09 min
  • 16
    Selectores de rango

    Selectores de rango

    10:16 min
  • 17
    Eres lo máximo

    Eres lo máximo

    07:55 min
  • 18
    Egoísta (selfish)

    Egoísta (selfish)

    09:47 min
  • 19
    Resolviendo diferencias

    Resolviendo diferencias

    10:49 min
  • 20
    Todas las uniones

    Todas las uniones

    14:45 min
  • 21
    Triangulando

    Triangulando

    10:34 min
  • 22
    Generando rangos

    Generando rangos

    14:27 min
  • 23
    Regularizando expresiones

    Regularizando expresiones

    11:00 min

Conceptos de SQL Avanzado

  • 24
    Bases de datos distribuidas

    Bases de datos distribuidas

    11:59 min
  • 25
    Queries distribuídos

    Queries distribuídos

    11:24 min
  • 26
    Sharding

    Sharding

    09:42 min
  • 27
    Window functions

    Window functions

    Viendo ahora
  • 28
    Particiones y agregación

    Particiones y agregación

    14:36 min
  • 29
    El futuro de SQL

    El futuro de SQL

    06:13 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      César Leonardo Garzón Castiblanco

      César Leonardo Garzón Castiblanco

      student•
      hace 5 años
        Patricio Sánchez Fernández

        Patricio Sánchez Fernández

        student•
        hace 2 años
        Andres Felipe Bolaños Fernandez

        Andres Felipe Bolaños Fernandez

        student•
        hace 2 años
      Roberto Jassiel Montes Gutierrez

      Roberto Jassiel Montes Gutierrez

      student•
      hace 5 años
        Sebastian Calderón Araque

        Sebastian Calderón Araque

        student•
        hace 4 años
        Juan Camilo Alvarez Jurado

        Juan Camilo Alvarez Jurado

        student•
        hace 3 años
      Aaron Quiroga

      Aaron Quiroga

      student•
      hace 4 años
        Julián Cárdenas

        Julián Cárdenas

        student•
        hace 2 años
      Andrés David Lizarazo Becerra

      Andrés David Lizarazo Becerra

      student•
      hace 5 años
        Esmeralda Palacios

        Esmeralda Palacios

        student•
        hace 4 años
      Anthony Guzman Lopez

      Anthony Guzman Lopez

      student•
      hace 5 años
      Ingrid Tatiana Barrios Villamizar

      Ingrid Tatiana Barrios Villamizar

      student•
      hace 4 años
        Marlon Diego Rodríguez Castro

        Marlon Diego Rodríguez Castro

        student•
        hace 3 años
        Jhins Ledys Cárdenas Pardo

        Jhins Ledys Cárdenas Pardo

        student•
        hace 2 años
      Aaron Fabrizio Calderon Guillermo

      Aaron Fabrizio Calderon Guillermo

      student•
      hace 5 años
      Ronny Jair Mora Rojas

      Ronny Jair Mora Rojas

      student•
      hace 3 años
      Jeovany Esteban Hernández Cervantes

      Jeovany Esteban Hernández Cervantes

      student•
      hace 4 años
        Gabriela Navas

        Gabriela Navas

        student•
        hace 3 años
      Luis Loaeza

      Luis Loaeza

      student•
      hace 5 años
        Alejandro Rico García

        Alejandro Rico García

        student•
        hace 5 años
        Gerardo Mayel Fernández Alamilla

        Gerardo Mayel Fernández Alamilla

        student•
        hace 4 años
      Sebastian Rodriguez

      Sebastian Rodriguez

      student•
      hace 3 años
      Cesar Augusto Morales Godoy

      Cesar Augusto Morales Godoy

      student•
      hace 4 años
      Mariano Gobea Alcoba

      Mariano Gobea Alcoba

      student•
      hace 4 años
        Anthony Campos

        Anthony Campos

        student•
        hace 4 años
      Danilo Valenzuela

      Danilo Valenzuela

      student•
      hace 5 años
      Juan José Mamani Tarqui

      Juan José Mamani Tarqui

      student•
      hace 2 años
      Wilner Alexander Ochoa Vivas

      Wilner Alexander Ochoa Vivas

      student•
      hace 3 años
      Danny Cortez

      Danny Cortez

      student•
      hace 4 años
      LIZBET ESTEFANY CASANA VERASTEGUI

      LIZBET ESTEFANY CASANA VERASTEGUI

      student•
      hace 5 años
        Patricio Villarroel Durán

        Patricio Villarroel Durán

        student•
        hace 5 años
        Miguel Angel Cáceres Valdivia

        Miguel Angel Cáceres Valdivia

        student•
        hace 5 años
      Alexander Sebastian Jaramillo Ordiales

      Alexander Sebastian Jaramillo Ordiales

      student•
      hace 3 años
      Cristian Velosa

      Cristian Velosa

      student•
      hace 3 años

      Window Functions


      ¿Qué son?

      Realizan cálculos en algunas tuplas que se encuentran relacionadas con la tupla actual.

      ¿Para que sirven?

      Evitan el uso de self joins y reduce la complejidad alrededor de la analítica, agregaciones y uso de cursores.

      Buen resumen, César.

      excelente, gracias.

      ![](

      sql-window-functions.png

      Una imagen vale más que mil palabras.

      Parece que faltó agregar el recurso; lo comparto por aquí, ya que es bastante claro y explica muy bien el tema: https://towardsdatascience.com/a-guide-to-advanced-sql-window-functions-f63f2642cbf9

      ++Window Functions++ Realizan cálculos que relacionan una tupla con el resto dentro de un mismo scope o partición.

      • Evita el uso del self joins
      • Reduce la complejidad alrededor de la analítica, agregaciones y cálculos
      • Luego de una agregación, la función OVER dicta el scope de la window function, al realizar un PARTITION BY campo
      • Si no se especifica un PARTITION BY, la funcion OVER() por default tomará toda la tabla
      • También se puede usar ORDER BY campo, esto agrega un campo de granularidad al cálculo, a la vez que agrupa todos los valores iguales dentro de la partición, que ahora se encuentran ordenados
      SELECT * SUM(colegiatura) OVER (PARTITION BY carrera_id ORDER BY colegiatura) FROM platzi.alumnos;
      • Podemos usar funciones de RANK()
      • Las Window Function se procesan casi al final de todas las operaciones, por eso para usar estas WF como un campo en WHERE, debemos hacer un subquery
      SELECT * FROM ( SELECT *, RANK() OVER (PARTITION BY carrera_id ORDER BY colegiatura DESC) AS brand_rank FROM platzi.alumnos ) AS ranked_colegiaturas_por_carrera WHERE brand_rank < 3 ORDER BY brand_rank;

      Excelente!

      Una función de ventana es una variación de una función de agregación. Cuando una función de agregación, como sum()y mean(), toma n entradas y devuelve un solo valor, una función de ventana devuelve n valores. La salida de una función de ventana depende de todos sus valores de entrada, por lo que las funciones de ventana no incluyen funciones que funcionan por elementos, como round(). Las funciones de ventana incluyen variaciones en funciones agregadas, como cumsum()y cummean(), funciones para clasificar y ordenar, como rank(), y funciones para tomar compensaciones, como lead()y lag().

      muy clara tu explicación :)

      El poder de Window functions es increible, yo usualmente trabajo mucho con SQL Server y esta funcion la usaba solamente para numerar grupos, pero ya veo que hay mas posibilidades.

      Dejo por acá este articulo de window functions, para profundizar un poco más, está bueno. https://mode.com/sql-tutorial/sql-window-functions/

      Excelente aporte, gracias mil.

      Excelente aporte. Muchas gracias.

      Para SQL Server:

      -- PROMEDIO DE CALEGIATURA POR CARRERA_ID -- Y MOSTRARLO POR CARRERA_ID -- ORDEN ASCENDENTE POR CARRERA_ID USE [platzi] SELECT carrera_id, AVG(colegiatura) AS promedio FROM platzi.alumnos GROUP BY carrera_id GO -- PROMEDIO DE COLEGIATURA POR CARRERA_ID -- Y MOSTRARLO EN CADA REGISTRO -- ORDEN ASCENDENTE POR CARRERA_ID USE [platzi] SELECT *, AVG(colegiatura) OVER (PARTITION BY carrera_id) AS promedio FROM platzi.alumnos GO -- SUMA DE COLEGIATURA POR COLEGIATURA -- Y MOSTRARLO EN CADA REGISTRO -- ORDEN ASCEDENTE POR COLEGIATURA USE [platzi] SELECT *, SUM(colegiatura) OVER (PARTITION BY colegiatura) AS suma FROM platzi.alumnos GO -- SUMA DE COLEGIATURA POR COLEGIATURA -- Y MOSTRARLO EN CADA REGISTRO -- Y SUMARLO CONSECUTIVAMENTE -- ORDEN ASCEDENTE POR COLEGIATURA USE [platzi] SELECT *, SUM(colegiatura) OVER (ORDER BY colegiatura ASC) AS suma FROM platzi.alumnos GO -- SUMA DE COLEGIATURA POR CARRERA_ID -- Y MOSTRARLO EN CADA REGISTRO -- Y SUMARLO CONSECUTIVAMENTE -- ORDEN ASCEDENTE POR CARRERA_ID USE [platzi] SELECT *, SUM(colegiatura) OVER (ORDER BY carrera_id ASC) AS suma FROM platzi.alumnos -- SUMA DE COLEGIATURA POR CARRERA_ID Y COLEGIATURA -- Y MOSTRARLO EN CADA REGISTRO -- Y SUMARLO CONSECUTIVAMENTE -- ORDEN ASCENDENTE POR CARRERA_ID -- Y ORDEN ASCENDENTE POR COLEGIATURA EN EL GRUPO CARRERA_ID USE [platzi] SELECT *, SUM(colegiatura) OVER (PARTITION BY carrera_id ORDER BY colegiatura ASC) AS suma FROM platzi.alumnos -- MUESTRA EL ORDEN POR COLEGIATURA -- DENTRO DE CADA CARRERA_ID -- ORDEN ASCENDENTE POR CARRERA_ID USE [platzi] SELECT *, RANK() OVER (PARTITION BY carrera_id ORDER BY colegiatura DESC) AS ranking FROM platzi.alumnos GO -- LO ANTERIOR -- DONDE EL RANKING < 3 USE [platzi] SELECT * FROM ( SELECT *, RANK() OVER (PARTITION BY carrera_id ORDER BY colegiatura DESC) AS ranking FROM platzi.alumnos ) AS ranked_colegiaturas_por_carrera WHERE ranking < 3 GO -- MUESTRA EL ORDEN POR COLEGIATURA -- DENTRO DE CADA CARRERA_ID -- ORDEN ASCENDENTE POR CARRERA_ID Y RANKING USE [platzi] SELECT *, RANK() OVER (PARTITION BY carrera_id ORDER BY colegiatura DESC) AS ranking FROM platzi.alumnos ORDER BY carrera_id, ranking GO

      Definitivamente considero que esta clase debe estar dentro de las primeras de este curso ¿Alguien opina lo mismo?

      Like si vives en el mundo de Oracle y tienes que buscar alternativas a esto :(

      ¿Qué tan distinto es? Actualmente trabajo con Salesforce y me es util el SQL, pero pronto vamos a migrar a Oracle.

      Pérame tantito, no que por la manera de los ranks no había rank número dos? por qué al final sí hubo rank dos?

      buena observación!

      Creo que el error no está en el código aunque si en la explicación, el dice que no habría dos pero en realidad no debería existir el 3, está bien que uno y dos existan ya que la condición es <3

      ++WINDOW FUNCTION:++

      • Es la relacion que existe entre una Tupla o Row en particular y el resto de Rows en una particion o en un window frame (Es una seccion de la tabla que me interesa medir y medir cual es la relacion que existe entre uno de los rows y todo el resto de los rows que se encuentran en la particion)

      • Cuando No le determino una particion, toma Como Window Frame o particion toda la Tabla.

      • Ranking: Que lugar ocupa algo en nuestra tabla.

      • Las Window Function corren al final casi de todo. Corren despues de Where, having, menos por Order By. Cuando hago el Where todavia No existe ese campo y arroja error.

      • Para solucionar lo anterior debemos usar Sub-Queries.

      Las 3 colegiaturas más caras con Join y Window Functions

      Muestra el top 3 de colegiaturas más caras con el nombre de la carrera traído desde la tabla platzi.carreras:

      SELECT * FROM ( SELECT DISTINCT c.carrera, a.colegiatura, RANK() OVER(PARTITION BY c.carrera ORDER BY colegiatura DESC) AS ranking FROM platzi.alumnos AS a INNER JOIN platzi.carreras AS c ON c.id = a.carrera_id GROUP BY c.carrera, a.colegiatura ORDER BY ranking) AS ranking_calegiatura_table WHERE ranking <= 3;

      Misma query pero sin window function es mucho mas compleja:

      -- Para hacer esto sin WF primero debo agrupar por carrera_id y calcular el promedio y luego hacer un join SELECT * FROM platzi.alumnos AS alum INNER JOIN ( SELECT carrera_id, AVG(colegiatura) FROM platzi.alumnos GROUP BY carrera_id ORDER BY carrera_id ASC) AS prom ON alum.carrera_id = prom.carrera_id ORDER BY alum.carrera_id ASC;

      muy buen código. Pude repasar mis conceptos de clases pasadas, entendiendolo.

      Genial, con las window functions puedo resolver un problema que tenía en la cabeza hace días.

      WINDOWS FUNCTIONS: Las funciones de ventana (window functions) son un grupo de funciones en SQL que permiten realizar cálculos en conjuntos de datos ordenados. Las funciones de ventana operan en un conjunto de filas denominadas ventana, que se especifica mediante una cláusula OVER.

      Las funciones de ventana se utilizan para realizar una variedad de cálculos, incluyendo:

      • Cálculos de agregación: SUM(), COUNT(), AVG(), MIN(), MAX()
      • Cálculos de ranking: RANK(), DENSE_RANK(), ROW_NUMBER(), NTILE()
      • Cálculos de desplazamiento: LAG(), LEAD(), FIRST_VALUE(), LAST_VALUE()

      Las funciones de ventana se utilizan comúnmente en análisis de datos para calcular métricas como:

      • Media móvil: La media móvil de un conjunto de datos es el promedio de los valores de datos en una ventana.
      • Tasa de crecimiento: La tasa de crecimiento de un conjunto de datos es el porcentaje de cambio en el valor de los datos entre dos puntos en el tiempo.
      • N principales: Las N principales filas de un conjunto de datos son las filas con los valores más altos o más bajos.
      • Percentiles: Los percentiles de un conjunto de datos son los valores que dividen el conjunto de datos en partes iguales.

      Ejemplo:

      El siguiente ejemplo muestra cómo utilizar la función de ventana AVG() para calcular la media móvil de las ventas de los últimos 3 meses:

      SQLSELECT customer_id, AVG(sales) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average_sales FROM orders;

      Esta consulta devuelve una columna adicional llamada moving_average_sales, que contiene la media móvil de las ventas de los últimos 3 meses para cada cliente.

      Las funciones de ventana son una herramienta poderosa para realizar análisis de datos en SQL. Pueden utilizarse para realizar una variedad de cálculos, incluyendo cálculos de agregación, ranking y desplazamiento.

      Debo admitir que esta clase me gusto mucho y me aclaro muchas de las dudas en cuanto a la estructura de los querys

      Un dato importante al momento de usar Windows Function y se usa la clausula ORDER BY en la misma, es que el order by de la consulta general tiene que ser el mismo que se usa en la windows function, sino se pueden obtener resultados innesperados. Saludos

      Porque no se necesita un group by?

      SELECT *, AVG(colegiatura) OVER (PARTITION BY carrera_id) FROM platzi.alumnos;

      SELECT *, AVG(colegiatura) OVER () FROM platzi.alumnos;

      ¿Para qué lo necesitarías? AVG agrupa todos los valores en un único valor, el promedio.

      El usar GROUP BY en el query lo que hace es mostrar filas únicas con valores promedios AVG() o sumas SUM(). En cambio al usar OVER() después del Window Functions, lo que hace es realizar el calculo según el quiebre o condición que le indicas en el PARTITION BY pero te muestra todas las filas de la tabla.

      Las funciones de ventana son similares a la agregación realizada en la cláusula GROUP BY. Sin embargo, las filas no se agrupan en una sola fila, cada fila conserva su identidad separada. Es decir, una función de ventana puede devolver un solo valor para cada fila. Aquí hay una buena visualización de lo que quiero decir con eso.

      !https://miro.medium.com/v2/resize:fit:721/1*bWw3tHCsXRHyOKOkm81eUg.png

      Observe cómo la agregación GROUP BY en el lado izquierdo de la imagen agrupa las tres filas en una sola fila. La función de ventana en el lado derecho de la imagen puede generar cada fila con un valor de agregación. Esto puede ahorrarle tener que hacer una unión después de GROUP BY.

      La principal ventaja de usar las funciones de Windows sobre las funciones agregadas regulares es: Las funciones de Windows no hacen que las filas se agrupen en una sola fila de salida, las filas retienen sus identidades separadas y solo se añadirá un valor agregado a cada fila.