SQL计数和不同和分区

时间:2012-06-13 18:29:42

标签: sql oracle oracle11g

我正在尝试使用分析函数的一些示例,并且我已经创建了一个sql小提琴来理解不同于partition by子句的计数。这是我的sqlfiddle

create table dummy (value1 varchar2(10),value2 varchar2(10));

insert into dummy values ('abc','abc1');
insert into dummy values ('abc','abc1');
insert into dummy values ('abc','abc2');
insert into dummy values ('def','abc1');
insert into dummy values ('ghi','abc2');
insert into dummy values ('xyz','abc3');
insert into dummy values ('xyz','abc3');

select value1,
       value2,
       count(distinct value2) over (partition by value1) as ValCount
from dummy

如果你看一下结果集,我希望第三行的valcount为1,而不是2,我不确定为什么会这样。

2 个答案:

答案 0 :(得分:2)

abc(值1)在第二列(abc1和abc2)上只有2个不同的值,并且由于你计算了在第1列上划分的column2上的不同值,你应该确实得到2

答案 1 :(得分:1)

valcount应为2。

您已按value1进行分区,因此计数在该上下文中执行。也就是说,在value1 =“abc”的结果组中,有2个不同的value2值(“abc1”,“abc2”)。