Oracle:在select查询中查找重复的行

use*_*114 1 sql oracle count duplicates

我的SQL查询返回4列"A","B","C","D"的结果.

假设结果是:

A    B    C    D
1    1    1    1
1    1    1    2
2    2    2    1
Run Code Online (Sandbox Code Playgroud)

是否可以获得每行中包含"A","B","C"列的重复行数.

例如,预期的结果是:

A    B    C    D    cnt
1    1    1    1    2
1    1    1    2    2
2    2    2    1    1
Run Code Online (Sandbox Code Playgroud)

我尝试使用count(*)结束.但它返回查询返回的总行数.另一个信息是,在示例中,我只提到了3列,我需要根据这些列检查计数.但我的实际查询有8列.并且数据库中的行数很大.所以我认为分组在这里不是一个可行的选择.任何提示都很明显.谢谢.

小智 7

也许为时已晚,但可能在oracle中作为分析函数(也称为窗口函数)的计数可以帮助您.当我正确理解您的请求时,这应该可以解决您的问题:

create table sne_test(a number(1)
                 ,b number(1)
                 ,c number(1)
                 ,d number(1)
                 ,e number(1)
                 ,f number(1));

insert into sne_test values(1,1,1,1,1,1);
insert into sne_test values(1,1,2,1,1,1);
insert into sne_test values(1,1,2,4,1,1);
insert into sne_test values(1,1,2,5,1,1);
insert into sne_test values(1,2,1,1,3,1);
insert into sne_test values(1,2,1,2,1,2);
insert into sne_test values(2,1,1,1,1,1);

commit;

 SELECT a,b,c,d,e,f, 
       count(*) over (PARTITION BY a,b,c)
  FROM sne_test;

 A  B  C  D  E  F AMOUNT
-- -- -- -- -- -- ------
 1  1  1  1  1  1      1
 1  1  2  4  1  1      3
 1  1  2  1  1  1      3
 1  1  2  5  1  1      3
 1  2  1  1  3  1      2
 1  2  1  2  1  2      2
 2  1  1  1  1  1      1
Run Code Online (Sandbox Code Playgroud)


小智 5

要查找重复项,您必须根据键列对数据进行分组

select 
  count(*)
  ,empno 
from 
  emp
group by
  empno
having
  count(*) > 1;
Run Code Online (Sandbox Code Playgroud)

empno即使每个类别存在多个记录(不止一个),这也允许您进行聚合。