今天收到一个比较怪异的需求,需要查询数据库中某一字段所有数值的相乘结果
我的第一反应是做一个CLR的聚合函数,在每次处理的时候做相乘操作即可
但是目标的数据库是sql2000,无法使用CLR函数
到网上搜索了一下,发现了一个很不错的解决方案。
logx+logy=logx*y
这个是一个高中生都学过的对数计算,对数的相加等于指数的相乘,我们利用这个方式转换加法到乘法
实现方式,先对记录取对数log(),然后sum聚合,最后exp,结果就是记录相乘的结果
select exp(sum(log(col))) from table where......