Oracle實現連乘的辦法

regonly1發表於2009-07-09

上次遇到一個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求各冪的和的指數值即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-608708/,如需轉載,請註明出處,否則將追究法律責任。

相關文章