我正在PL SQL Developer 12上工作,我想获取给定表中重复记录的数量。什么是最好的工具?
我一直在尝试使用以下analyze table tablename compute statistics
,但它给了我一个表不存在的错误。
请注意,我是Oracle数据库开发的新手
答案 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