OVER PARTITION BY的疑问

[复制链接]
查看11 | 回复4 | 2009-7-22 09:30:00 | 显示全部楼层 |阅读模式
一般用聚合函数(如SUM)的时候就要用GROUP BY,但是有种方法可以代替GROUP BY那就是在使用聚合函数的那行写OVER PATITION BY进行分组,如下文
sum(T1.A) over(partition by T1.B,T1.C......)
但是在实际的使用中我发现个问题 每次使用over(partition by...)后就会出现重复值 如果什么都不变,仅仅是把over(partition by..)的条件改成GROUP BY写在查询的末尾的话查询结果是不会出现重复值的,请问各位老大 这是为什么啊?如何解决?
另外还有问题2.如果我有一个条件是显示内容不出现T1.A等于T2.B等于T3.C的行我该怎么写?
我试过WHERE T1.AT2.B AND T2.BT3.C的方法 但是并没有达到上述的现实要求,不知道ORACLE有没有这种查询方法呢?
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
1、partition by 不会缩小结果集,但会对数据排序;group by 是分组,对结果集是有影响的。所以这两种方法不能互换的。
2、WHERE T1.AT2.B AND T2.BT3.C AND T1.AT3.C
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
1.缩小结果集也不会让它出现重复值吧
2.请看下面的图

oracle.jpg (16.89 KB, 下载次数: 22)
下载附件
2009-11-26 12:48 上传
如果按照2L提供的方法进行条件限制的话 那么整个结果集只会显示3个表(图中A B C)中的空白区域,但是我实际上想要的结果集是红色和空白区域的结果集,也就是说仅仅是把黑色区域的结果集屏蔽掉(而且我还不能用UNION)
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
LZ, 用实际数据举个简单的例子, 并把想要的结果列出!
回复

使用道具 举报

千问 | 2009-7-22 09:30:00 | 显示全部楼层
原帖由 april2244 于 2009-11-26 12:48 发表
1.缩小结果集也不会让它出现重复值吧
2.请看下面的图641793如果按照2L提供的方法进行条件限制的话 那么整个结果集只会显示3个表(图中A B C)中的空白区域,但是我实际上想要的结果集是红色和空白区域的结果集,也就是说仅仅是把黑色区域的结果集屏蔽掉(而且我还不能用UNION)

1、没有测试数据是说不清楚了,呵呵
2、where not (a=b and b=c and c=a) 试试看
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行