您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页sql中的相乘聚合函数

sql中的相乘聚合函数

来源:五一七教育网
sql中的相乘聚合函数

sql中提供的聚合函数,通常包括sum,count,avg,max,min,但不包括乘法; 比如有这样一个数据集: id x 1 1 1 2 1 3 2 4 2 5 2 6 ;

想实现成如下形式 id prob_x

1 6 2 120

即让第一组中1*2*3=6 第二组中4*5*6=120

用data步中first+retain可以实现,但data需要先排序;

而sql的聚合函数中也没有相乘这一函数,于是有些牛人想到通过数学转化,将乘法转为加法,而sql中可以 用sum实现加法聚合。

说来也简单,主要想法就是A*B=exp(lnA*B)=exp(lnA+lnB);

select id,exp(sum(log(x))) as prob_x from data_set group by id; ============================================= 但我觉得也需要补充一点东西:

首先有0的情况下,log函数的定义域为{x>0},有0出现的时候,改组最后结果肯定为0;

其次是有负数的情况,需要对绝对值进行计算,计算每组负数的个数,如果负数是偶数个,那么结果为正,

如果为奇数个,则需要在结果上添上负号。 最后可以写成这样

select id,(case when sum(case when x=0 then 1 else 0 end) >0 then 0 when mod(sum(case when x<0 then 1 else 0 end),2)=0 then exp(sum(log(x)))

else -1*exp(sum(log(abs(x)))) end) as prod_x from data_set group by id;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务