No sé que es OVER ni partition_by, no lo vi en ningún curso anterior 😦

Pregunta de la clase:
El primero
Manuel Espitia

Manuel Espitia

Pregunta
studenthace 4 años

No sé que es OVER ni partition_by, no lo vi en ningún curso anterior 😦

1 respuestas
para escribir tu comentario

    studenthace 4 años

    Hola, Over es una clausula que reciben las funciones analiticas que funcionan con la metodología de ventana corrediza. En esta clausula admiten parámetros de análisis que funcionaran sobre el set de resultados de la select aplicando las condiciones del where. Se les llama analíticas porque "analizan" el set de resultados de acuerdo con los criterios que se indiquen en la clausula OVER.

    Dentro de la misma clausua OVER() puedes entonces poner algunos parametros como: PARTITION BY, ORDER BY y dependiendo de la funcion tienes tambien ROWS BETWEEN) Estos parámetros harán referencia al set de resultados y al cómo se analizarán los resultados de este set.

    Partition by: Hará referencia a con qué criterio de agupacion será ejecutada la función sobre el set de datos general. Básicamente es qué expresiones (o campos) deben aplicarse como criterio de agrupamiento sobre set de resultados de la consulta, para ejecutar la funcion por cada grupo resultante siendo las expresiones/columnas que se especifiquen en este parámetro el criterio de agrupación para la funcion. (Parecido a un group by, pero al vuelo y que aplica solo para el análisis del resultado de la funcion ;) )

    ORDER BY: Hace referencia a con qué criterio (o expresiones, que pueden ser las mismas columnas) serán ordenados los datos del subconjunto dado por el partition by para ejecutar la funcion analítica.

    ROWS BETWEEN: Hace referencia qué registros serán tenidos en cuenta por la funcion analítica. Pueden encontrarse algunos valores como: ++UNBOUNDED PRECEDING++, que hace referencia a "deede la primer fila de resultados", ++CURRENT ROW++: Quye indicará la fila actual, ++UNBOUNDED FOLLOWING++ que indicará hasta el final de los resultados. Justamente por este opción de ROWS BETWEEN Es que se les denomina de ventana corrediza.

    por ejemplo:

    SELECT col1, col2, col2, SUM(campo3) OVER(++PARTITION BY++ col1 ++ORDER BY++ col2 asc ++ROWS BETWEEN++ UNBOUNDED PRECEDING AND CURRENT ROW) from tabla where condiciones_sobre_registros

    En este ejemplo, supón que tienes un set de resultados de 3 columnas (col1, col2, col3) y varias filas, lo que hará es sumar los valores col3, por cada valor en col1 (a causa del partition by) , para todos los elemementos resultantes de una select desde el inicio del set hasta la fila actual (a causa del ROWS BETWEEN), ordenando las filas por el valor de col2 como criterio de manera ascendente (esto es por el ORDER BY)

    No debes confundirte con el ORDER BY, aunque hay un ORDER BY en el OVER(), es de aclarar que este ORDER BY no afectará directamenete al orden en que se presentan los datos resultantes del query sino que en este caso, afectará al cómo se analizan los datos para calcular el valor de la función por cada registro ;) .

    Saludos.

Curso Práctico de SQL

Curso Práctico de SQL

SQL es el lenguaje por excelencia para el manejo de datos estructurados. Incrementa tus habilidades en él con ejercicios de álgebra relacional, subconsultas y window functions. Aprende a hacer consultas más eficientes y complejas con este lenguaje.

Curso Práctico de SQL
Curso Práctico de SQL

Curso Práctico de SQL

SQL es el lenguaje por excelencia para el manejo de datos estructurados. Incrementa tus habilidades en él con ejercicios de álgebra relacional, subconsultas y window functions. Aprende a hacer consultas más eficientes y complejas con este lenguaje.