一种SQL计算行间四则运算的办法
数据库的SQL语言只能计算行间的和,为了进行加减乘除四则运算,我们必须找到把其他运算转化为加
法的办法。减法转化为加法的办法比较简单,只要先取要减的数的相反数,然后相加就可以了。
乘法转化为加法我们要利用数学知识,假定a的常用对数是m,10的m次幂就等于a,用公式表示为:10^
(lg(a))=a。两个数ab的积的常用对数等于ab各自常用对数的和,用公式表示为:lg(a*b)=lg(a)+lg(b)
。这样推论
n个数a1,a2...an的连乘积∏(ai)就等于10的m次幂,其中m=∑(lg(ai))。
我们再利用lg(1/a)=-lg(a)同理可以把除法转为加法。
SQL> select sum(a) from(
2 (select power(10,sum(
3 case
4 when v2=1 then log(10,v1) --乘
5 when v2=2 then -log(10,v1) --除
6 end )) a from tm where v2<3)
7 union all
8 (select sum(
9 case
10 when v2=3 then v1 --加
11 when v2=4 then -v1 --减
12 end ) a from tm where v2>=3)
13 )
14 ;
SUM(A)
----------
-.6
SQL> select * from tm
2 /
V1 V2
---------- ----------
5 2
2 1
3 3
4 4
SQL> select 1/5*2+3-4 from dual;
1/5*2+3-4
----------
-.6