Teóricamente debería existir, como existe por ejemplo en Excel o en Matlab (en este caso con el nombre de PROD), pero lo cierto es que en SQL no existen las funciones PRODUCT ni PROD. Entonces, ¿qué hacer si tenemos que calcular el producto de un determinado campo para diferentes registros de una tabla?
Seguro que alguno habrá pensado, muy sencillo, escribo un cursor que se recorra todos los registros que quiero multiplicar y voy acumulando el producto de todos ellos. Es la primera solución en la que cualquiera puede pensar, pero existe una solución mucho más sencilla... ¿por qué no aprovechar aquella propiedad de los logaritmos que decía: "El logaritmo de un producto es lo mismo que la suma de los logaritmos"?
LN(a*b*c) = LN(a) + LN (b) + LN(c)
Ciertamente, utilizando esta propiedad podemos simular la función PRODUCT, veamos como:
PRODUCT(nombre_campo) = EXP(SUM(LN(nombre_campo)))
Afortunadamente las funciones LN (que calcula el logaritmo neperiano de un número) y su función inversa EXP (que calcula e elevado a un número determinado) sí que existen en SQL y PLSQL.
Pero para demostrar que funciona no hay nada mejor que utilizar un ejemplo sencillo:
SELECT EXP(SUM(LN(Num))) FROM (SELECT 2 Num FROM DUAL UNION SELECT 3 Num FROM DUAL UNION SELECT 4 Num FROM DUAL UNION SELECT 5 Num FROM DUAL)
¿No es cierto que el resultado da 120? Es decir, el resultado de multiplicar 2*3*4*5.
Espero que el post os haya resultado útil.
2 comentarios:
sencillamente genial :)
y como se haría para simular la division?
Publicar un comentario