错在哪里?

[复制链接]
查看11 | 回复6 | 2012-5-15 15:24:11 | 显示全部楼层 |阅读模式
在ORACLE8i 的在线文档里有这么一个例子:SELECT ENAME, SAL, STDDEV(SAL) OVER (ORDER BY HIREDATE)
FROM EMP
WHERE DEPTNO=30;

ENAMESALSTDDEV(SAL
---------- ---------- ----------
ALLEN
1600
0
WARD
1250 247.487373
BLAKE
2850 841.130192
TURNER 1500 715.308791
MARTIN 1250 666.520817
JAMES
950 668.331255
我把它COPY到SQL*PLUS中运行时却报错:
SELECT ENAME, SAL, STDDEV(SAL) OVER
*
ERROR at line 1:
ORA-00937: not a single-group group function
请问这是为什么?


回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
SELECT ENAME, SAL, STDDEV(SAL)
FROM EMP
WHERE DEPTNO=30
group by ENAME, SAL;
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
SQL> SELECT ENAME, SAL, STDDEV(SAL) OVER (ORDER BY HIREDATE)
2FROM EMP
3WHERE DEPTNO=30;
ENAME
SAL STDDEV(SAL)OVER(ORDERBYHIREDATE)
---------- ---------- --------------------------------
ALLEN
1600
0
WARD
1250
247.487373
BLAKE
2850
841.130192
TURNER 1500
715.308791
MARTIN 1250
666.520817
JAMES
950
668.331255
已选择6行。
也许你拷贝该语句,有非法字符吧。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
最初由 karson 发布
[B]SQL> SELECT ENAME, SAL, STDDEV(SAL) OVER (ORDER BY HIREDATE)
2FROM EMP
3WHERE DEPTNO=30;
ENAME
SAL STDDEV(SAL)OVER(ORDERBYHIREDATE)
---------- ---------- --------------------------------
ALLEN
1600
0
WARD
1250
247.487373
BLAKE
2850
841.130192
TURNER 1500
715.308791
MARTIN 1250
666.520817
JAMES
950
668.331255
已选择6行。
也许你拷贝该语句,有非法字符吧。 [/B]

谢谢,可能是我的数据库本身有问题,换了个数据库再试就对了。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
时间窗口类的函数只有816以后的版本才有。
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
是不是time series?其实对于那个statement中的STDDEV(SAL) OVER (ORDER BY HIREDATE) 能不能详细解释一下!
回复

使用道具 举报

千问 | 2012-5-15 15:24:11 | 显示全部楼层
sorry, 回复晚了.
窗口类函数也可以称为分析函数(Analytic Functions)
可以对多行进行运算.(这一点类似于815以前的group函数)
如果对股票有兴趣的话, 常用的技术指标(如n日均线), 实际上都是窗口函数.
详细内容, 可以参考816/817的sql reference.
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行