您好
我现在想统计的是某一列的值重复次数大于等于2 的数量,要使用分析函数来实现的,因为统计重复的列和分组的列是不同的,下面是我的想法:
select a,sum((sum(1) over (partition by b))>=2) from table group by a;想法就是这样子的,不过此语句存在问题,在下分析函数还没有怎么用过,请看看这个怎么实现呢,谢谢啦~~~
我现在想统计的是某一列的值重复次数大于等于2 的数量,要使用分析函数来实现的,因为统计重复的列和分组的列是不同的,下面是我的想法:
select a,sum((sum(1) over (partition by b))>=2) from table group by a;想法就是这样子的,不过此语句存在问题,在下分析函数还没有怎么用过,请看看这个怎么实现呢,谢谢啦~~~
with a as(
select 1 as id, 'bbbb' as name from dual
union all
select 1 as id, 'cccc' as name from dual
union all
select 2 as id, 'aaaa' as name from dual
union all
select 2 as id, 'dddd' as name from dual
union all
select 2 as id, 'eeee' as name from dual)
select sub.id, max(cnt) from
(select id, ROW_NUMBER() over (partition by id order by id) cnt from a) sub group by sub.id
having max(cnt) > 2
结果是:(看ID那列就行)
ID MAX(CNT)
2 3
select pk from a group by pk having count(*)>2;
其实按照我的想法,你表中的五条记录,统计之后的数据为2 ,因为你的id只有俩种,而且 id 为1 的是俩个,id为2 的是3 个,我的想法是,id大于等于2 的就算一个,所以统计的结果应该是 2 。而且我分组要按照第二列去分组。
麻烦再看看怎么能实现呢,谢谢啦~~
现在我表中的记录时如下格式的:
1,aa
1,bb
1,cc
1,aa
1,bb
2,cc
2,dd统计的结果应该是按照第二列分组,且重复次数大于等于2的,所以只有一条记录符合这样的要求:
1,bb 这条,结果应该是 1(这里的1指的是数量,不是记录中的),bb
(
id number(2),
name varchar2(4)
)
select 1,name from tb where id=1 group by name having count(name)>=2