Introducción a las Funciones de Ventana
Abordemos ahora un recurso del SQL muy interesante, las funciones de ventana. Esta funcionalidad es poco conocida, pero resulta de mucha utilidad. He de confesar que yo mismo las he usado poco, salvo en algunos casos concretos. Quizás se deba a que con subconsultas pueden ser emulados algunos casos, o porque no las he necesitado. Lo cierto es que a lo largo de mi carrera apenas he encontrado código de otros desarrolladores que hayan usado este recurso, lo cual confirma que no se suele tener en cuenta para aplicar en las soluciones en algunos ámbitos. Sin embargo, dominar este recurso permite resolver problemas complejos (como rankings o acumulados) de forma mucho más elegante y eficiente que las subconsultas tradicionales. El uso de funciones de ventana está plenamente asentado en ámbitos como el Análisis de Datos (Data Analytics) y Data Science.
En la lección 6, donde se introdujeron las funciones de agregado sin usar aún la cláusula GROUP BY, se dijo: “no tiene sentido mezclar en la cláusula SELECT campos de la tabla con funciones de agregado”. Y es verdad, pero las funciones de ventana son una excepción a esta regla. Retomemos el caso sugerido que podía inducir a error: calcular el porcentaje de salario que cobra cada empleado versus el total de salarios de los empleados. Entonces se dijo que el SGBD jamás recorrería la tabla dos veces para brindarle el resultado (una primera vez para calcular el total de salarios, y una segunda para, con ese total, calcular el porcentaje de cada empleado). Pues bien, las funciones de ventana junto con la palabra clave OVER, hacen justamente esto desde un punto de vista lógico. Sin necesidad de una subconsulta se tiene en la misma consulta el total de salarios para poder aplicarlo a cada registro de la tabla.