在SQL中利用最小二乘计算回归系数

在SQL中经常需要计算数据的趋势,如下表中,ID为123在1-5月的通话费。现在要预测6月份的通话费或者说需要观察它的变化趋势。对于这些数据使用回归分析 ,如果得到的直线的斜率大于零,则其话费呈增长的趋势;如果直线的斜率小于零,则这5个月的话费呈减小的趋势。

ID

1月话费

2月话费

3月话费

4月话费

5月话费

123

54

41

61

73

68

 

在excel 中作直线拟合,得到如下图。

如果以直线y=ax+b来拟合这些数据,则真实值与拟合值的误差为。现在目标是使得误差的平方和最小,即最小。

对上式求导数,得

解得

或者

在SQL中实现如下。

先将数据插入到一个表中。

Declare @ID varchar(50),@count1 int,@count2 int,@count3 int,@count4 int,@count5 int;

Declare @BillTable table(CustomerID varchar(50),x int,Count int);

Declare Bill_Cursor Cursor for

  select ID, 1月话费, 2月话费, 3月话费, 4月话费, 5月话费

from 话费清单 

open Bill_Cursor;

fetch Next from Bill_Cursor into @ID,@count1,@count2,@count3,@count4,@count5;

while @@FETCH_STATUS=0

begin

  if (@count1 is not null) insert @BillTable values (@ID,1,@count1) else insert @BillTable values (@ID,null,@count1)

  if (@count2 is not null) insert @BillTable values (@ID,2,@count2) else insert @BillTable values (@ID,null,@count2)

  if (@count3 is not null) insert @BillTable values (@ID,3,@count3) else insert @BillTable values (@ID,null,@count3)

  if (@count4 is not null) insert @BillTable values (@ID,4,@count4) else insert @BillTable values (@ID,null,@count4)

  if (@count5 is not null) insert @BillTable values (@ID,5,@count5) else insert @BillTable values (@ID,null,@count5)

  fetch Next from Bill_Cursor into @ID,@count1,@count2,@count3,@count4,@count5;

end

 

close Bill_Cursor;

deallocate Bill_Cursor;

 

select * into BillTable from @BillTable

继而计算a的值,b值同理可得。

select CustomerID, a=case when (count(Count)*sum(x*x)-sum(x)*sum(x))!=0

                               then (count(Count)*sum(x*Count) - Sum(x)*sum(Count))*1.0 /(count(Count)*sum(x*x)-sum(x)*sum(x))

                          else null

                      end

from BillTable

group by CustomerID

转载于:https://www.cnblogs.com/zgw21cn/archive/2009/05/22/1487282.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值