分析具有重复记录的Oracle表

时间:2019-03-14 09:13:59

标签: oracle plsql

我正在PL SQL Developer 12上工作,我想获取给定表中重复记录的数量。什么是最好的工具?

我一直在尝试使用以下analyze table tablename compute statistics,但它给了我一个表不存在的错误。

请注意,我是Oracle数据库开发的新手

2 个答案:

答案 0 :(得分:0)

欢迎来到Oracle世界。

您使用的analyze table tablename compute statistics语句对您没有帮助。该命令用于计算查询优化器使用的Oracle DB内部统计信息,因此Oracle可以找到查询数据的最佳方法(有关更多信息,请参考Cost based Optimizer)。此外,该命令已被弃用,应改用dbms_stats Analyzing Tables, Indexes, and Clusters

现在让我们来解决您的问题。可以通过在选择中包含子句来解决。请参见下面的示例:

create table foo_bar (
      id_foo integer generated by default on null as identity
    , name_bar varchar2(100)
    , constraint Foo_Bar_PK primary key (id_foo)
);

insert into foo_bar (name_bar) values ('John');
insert into foo_bar (name_bar) values ('John');
insert into foo_bar (name_bar) values ('Mike');
insert into foo_bar (name_bar) values ('Susan');
insert into foo_bar (name_bar) values ('Jerry');
insert into foo_bar (name_bar) values ('Jerry');
insert into foo_bar (name_bar) values ('Jerry');

-- query for all data
select * from foo_bar;

+--------+----------+
| ID_Foo | Name_bar |
+--------+----------+
|      1 | John     |
|      2 | John     |
|      3 | Mike     |
|      4 | Susan    |
|      5 | Jerry    |
|      6 | Jerry    |
|      7 | Jerry    |
+--------+----------+

-- this query will return all names which have more than 1 occurrence in the table
select name_bar
  from foo_bar
 group by name_bar
 having count(1)>1;

+----------+
| name_bar |
+----------+
| John     |
| Jerry    |
+----------+

--to get number of duplicate records you can use this
select sum(count(name_bar))
  from foo_bar
 group by name_bar
having count(1)>1;


drop table foo_bar;

答案 1 :(得分:0)

假设重复的记录与所有列具有相同数据的记录中的重复记录一样,以下查询可能会有所帮助。

select column1, count(column1) 
from table1 
group by column1, column2, .. columnn
having count(1) > 1;

在上面的查询column1,column2,.. columnn是表中的n列(所有列)。 基本上,您必须按所有列进行分组,并且由于只需要那些重复的记录,因此条件count(1)> 1