分析函数请教,谢谢

[复制链接]
查看11 | 回复3 | 2009-1-4 14:52:28 | 显示全部楼层 |阅读模式
数据如下,
create table TEST
(
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
SAL NUMBER(7,2),
BONUS NUMBER
);
insert into test(empno,ename,sal,bonus) values(7934,'MILLER',1300,130);
insert into test(empno,ename,sal,bonus) values(7934,'MILLER',1300,260);
insert into test(empno,ename,sal,bonus) values(7839,'KING',5000,1500);
insert into test(empno,ename,sal,bonus) values(7782,'CLARK',2450,245);
---------------------------------------------------------------------------------------------------------------------------------------
用group 对empno做合计
select empno,ename,sum(bonus) fromtest
group by empno,ename
结果如下:
1 7839 KING 1500
2 7782 CLARK 245
3 7934 MILLER 390
如果改用 sum( ) over
select empno,ename,sum(bonus) over (partition by empno) sal2
from test
结果如下:
1 7782 CLARK 245
2 7839 KING 1500
3 7934 MILLER 390
4 7934 MILLER 390
这样结果会有重复记录,需要加上 distinct 才行,感觉就是在数据基础上对列进行了合计
想请教一下,分析函数的执行原理,为什么这条数据需要distinct ,谢谢!

回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
这个不叫重复记录吧,是表TEST的记录数呀。
分析函数sum只是对empno分组后是一组的数据结果统计出来
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
你把7934的其中一个'MILLER'换一个另外的名字,再看看还一样吗。。你没理解分析函数该用在什么地方,而不是原理问题,自己想想为什么不用group by就知道为什么需要DISTINCT了
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
每一条记录都使用分析函数,原始数据有重复
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行