Oracle实现连乘的办法

上次遇到一个Oracle连乘的一个问题。
原先解决的思路是构建一个自定义聚集函数来实现。
今天从yangtingkun的blog上看到了一个特殊的解决思路。不知道效率如何,但是从技术来讲这是一个很巧妙的算法。我是分步骤拆解后才搞清楚实现的原理。
with t as (select rownum rn from dual where rownum <= 10)
select power(10, sum(log(10, rn))) from t;
首先看第一步:
对10求rn的指数值,即10^a = rn
所以有:
10^a = 1;
10^b = 2;
10^c = 3;
......
从以上可以看出,如果要实现1×2×3,则有:
10^a × 10^b × 10^c
也就是:
10^(a+b+c)
所以,要实现连乘,就要先把各个要连乘的幂求出来,然后实现各个幂相加,再对10求各幂的和的指数值即可。

请使用浏览器的分享功能分享到微信等