这样的SQL语句如何写,请各位指点下,先谢谢了

[复制链接]
查看11 | 回复9 | 2006-6-24 02:25:14 | 显示全部楼层 |阅读模式
有个表test(a,b)其中a是日期型,b是数字型
如:
a
b
2006-6-24 2:25:141.87
2006-6-24 3:25:14
1.85
2006-6-24 3:25:15
1.85
2006-6-25 3:25:15
1.87
2006-6-25 3:25:17
1.86
2006-6-25 3:25:17
1.86
2006-6-26 3:25:18
1.61
2006-6-26 13:25:18
1.86
2006-6-26 3:25:19
1.88
2006-6-26 3:25:20
1.86
2006-6-27 3:25:21
1.86
2006-6-27 3:25:21
1.87
2006-6-28 13:25:21
1.89
2006-6-28 13:25:23
1.86
2006-6-28 13:25:24
1.86
现在求每天的的S值,其中S的公式
这样的SQL语句如何写,请各位指点下,先谢谢了
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
用plsql 块还是要单条sql语句
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
最初由 mychary 发布
[B]用plsql 块还是要单条sql语句 [/B]

单条sql语句
谢谢
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
select sqrt(aaa/cnt) from
(select sum((tt.b-a.avg)*(tt.b-a.avg)) aaafrom
(select avg(b) avg from test) a,test tt) eee,
(select count(*) cnt from test) fff

---- 你自己加条件好了,


回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
SQL> select * from test
2/
A
B
--------------- ----------
27-JUN-05
2
27-JUN-05
3
27-JUN-05
1
SQL> select sqrt(aaa/cnt) from
2(select sum((tt.b-a.avg)*(tt.b-a.avg)) aaafrom
3(select avg(b) avg from test) a,test tt) eee,
4(select count(*) cnt from test) fff
5/
SQRT(AAA/CNT)
-------------
.816496581
SQL>
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
最初由 life.love 发布
[B]有个表test(a,b)其中a是日期型,b是数字型
如:
a
b
2006-6-24 2:25:141.87
2006-6-24 3:25:14
1.85
2006-6-24 3:25:15
1.85
2006-6-25 3:25:15
1.87
2006-6-25 3:25:17
1.86
2006-6-25 3:25:17
1.86
2006-6-26 3:25:18
1.61
2006-6-26 13:25:18
1.86
2006-6-26 3:25:19
1.88
2006-6-26 3:25:20
1.86
2006-6-27 3:25:21
1.86
2006-6-27 3:25:21
1.87
2006-6-28 13:25:21
1.89
2006-6-28 13:25:23
1.86
2006-6-28 13:25:24
1.86
现在求每天的的S值,其中S的公式
这样的SQL语句如何写,请各位指点下,先谢谢了 [/B]

我来写一个
别忘了在字段 a上建一个 to_char(a,'YYYYMMDD') 的函数索引,不然的话记录数据一多,呵呵,就有的等了
select d,sqrt(sum(power(ss,2))/count(*)) s
from
(select to_char(to_char(a,'YYYYMMDD')) d,
b-avg(b) over (partition by to_char(a,'YYYYMMDD')) as ss
from test)
group by d
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
最初由 mychary 发布
[B]SQL> select * from test
2/
A
B
--------------- ----------
27-JUN-05
2
27-JUN-05
3
27-JUN-05
1
SQL> select sqrt(aaa/cnt) from
2(select sum((tt.b-a.avg)*(tt.b-a.avg)) aaafrom
3(select avg(b) avg from test) a,test tt) eee,
4(select count(*) cnt from test) fff
5/
SQRT(AAA/CNT)
-------------
.816496581
SQL> [/B]

如果是两天的数据,这样能行吗?
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
这个公式是叫什么方差来着? 是不是有直接的公式可以算啊。
没有的话只能像楼上的楼上那么写了
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
强得我看不懂,呵呵……
回复

使用道具 举报

千问 | 2006-6-24 02:25:14 | 显示全部楼层
方差的自由度是n-1,你这里的公式是用n,公式搞错了吧,stddev就是标准差函数
select to_char(t.a,'yyyymmdd'),
Stddev(t.b),
sqrt(variance(t.b)*(count(*)-1)/count(*))--这里符合你的公式
from test t
group by to_char(t.a,'yyyymmdd')
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行