登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 静言_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,均方根误差RMSE select 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
是不是也很方便呢
|