您好
      我现在想统计的是某一列的值重复次数大于等于2 的数量,要使用分析函数来实现的,因为统计重复的列和分组的列是不同的,下面是我的想法:
      select a,sum((sum(1) over (partition by b))>=2) from table group by a;想法就是这样子的,不过此语句存在问题,在下分析函数还没有怎么用过,请看看这个怎么实现呢,谢谢啦~~~

解决方案 »

  1.   

    下面是统计id列重复次数大于2的记录:
    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
      

  2.   

    如果只是想统计重复数量大于2的可以这样来统计的
    select pk from a group by pk having count(*)>2;
      

  3.   

    兰兰美女你好,
       其实按照我的想法,你表中的五条记录,统计之后的数据为2 ,因为你的id只有俩种,而且 id 为1 的是俩个,id为2 的是3 个,我的想法是,id大于等于2 的就算一个,所以统计的结果应该是 2 。而且我分组要按照第二列去分组。
        麻烦再看看怎么能实现呢,谢谢啦~~
      

  4.   

    问题补充:
         现在我表中的记录时如下格式的:
             1,aa
            1,bb
            1,cc
            1,aa
            1,bb
            2,cc
            2,dd统计的结果应该是按照第二列分组,且重复次数大于等于2的,所以只有一条记录符合这样的要求:
          1,bb 这条,结果应该是 1(这里的1指的是数量,不是记录中的),bb
      

  5.   

    create table tb
    (
    id number(2),
    name varchar2(4)
    )
    select 1,name from tb where id=1 group by name having count(name)>=2
      

  6.   

    不是这样子的,是按照 name分组,然后 统计id重复次数大于等于2 的记录数有多少,像我那个表中的记录就应该只有一条啦。
      

  7.   

    应该是  1, aa;1,bb吧?
      

  8.   

    select *  from a where a.id< (select max(b.id) from a b where a.id = b.id) order by name
      

  9.   

    好像你這有兩條數據 符合你的要求把 一個是1,aa 一個是1,bb
      

  10.   

    select id,count(name) from table group by id having count(name)>=2