静言_GRMC 发表于 2018-5-25 13:04:54

用sql实现相关系数的计算

本帖最后由 静言_GRMC 于 2018-5-25 13:07 编辑

平时工作中要用到好多统计查询功能,一直用sql比较顺手,最近需要做相关系数方面的统计,发现除了Oracle自带了函数外,ms sql和mysql都没有自带计算的函数,因此根据相关系数的公式,编写了sql来实现直接从数据库计算,简单又方便。(当然用excel,matlab之类的一个函数搞定,但数据存在数据库里面,用其他的方式还得把数据导出来才行,通过sql可以直接在数据库计算,更加的方便)
MySQL计算相关关系示例代码:create table sample( xfloat not null, y float not null );insert into sample values(1, 10), (2, 4), (3, 5), (6,17);
select @ax := avg(x),        @ay := avg(y),        @div := (stddev_samp(x) *stddev_samp(y))from sample;
select sum( ( x - @ax ) *(y - @ay) ) / ((count(x) ) * @div) from sample;+---------------------------------------------------------+| sum( ( x - @ax ) * (y -@ay) ) / ((count(x) ) * @div) |+---------------------------------------------------------+|                                    0.700885077729073 |+---------------------------------------------------------+
Oracle有自带相关系数的函数CORR 可以直接计算。
此外还可以计算平均误差ME,平均绝对误差MAE,均方根误差RMSEselect Sum(X-Y)/COUNT(X) as ME,Sum(abs(X-Y))/COUNT(X) as MAE,SQRT(sum(POWER(X-Y,2))/COUNT(X)) as RMSE FROM TABLE
是不是也很方便呢

delete99999 发表于 2018-5-29 07:43:54

学习了,非常感谢
页: [1]
查看完整版本: 用sql实现相关系数的计算