El día de hoy quiero compartir con ustedes un hallazgo de esas funciones místicas (si Pimienta, es místico esto) de MySQL. Se trata del keyword ROLLUP de GROUP BY. Qué es esto y como funciona? Supongamos el siguiente ejemplo:
SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente
Ahorrando los detalles de que era habia un JOIN en Clientes y Pagos. Tenemos un listado con la suma de los pagos por cliente, pues bien, si queriamos tener un gran total de esto la gente era tonta y en lenguaje de programación hacian una suma de las sumas de pagos (he visto mucho código así, lo juro). Otros menos torpes como yo, usamos el famoso UNION para agregar un NULL como NombreCliente y sumar todo. Ok nada novedoso para muchos, pero bueno MySQL trae un nivel bastante agradable para mejorar esto.
SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente
UNION
SELECT NULL as NombreCliente, SUM(MontoPago) FROM Clientes
Usando ROLL UP tenemos:
SELECT NombreCliente, SUM(MontoPago) FROM Clientes GROUP BY NombreCliente WITH ROLLUP
Lo que nos da el mismo resultado, y es hermoso. Claro este SELECT no tiene complicaciones, pero cuando tienes un SELECT construido para generar un pivote dinámico, tienes complicaciones existenciales más importantes que reflejar los JOINS y clausulas del UNION.
Espero que le ayude a alguién este tip, que a mi la verdad me sirvió de mucho!
EDIT: A lo que preguntaron por messenger, si en SQL Server al parecer si existe la palabra clave ROLLUP, se maneja igual según MSDN, más no lo he checado.
No hay comentarios:
Publicar un comentario