Анализ таблицы оракула с дубликатами записей - PullRequest
1 голос
/ 14 марта 2019

Я работаю над PL SQL developer 12 и хочу получить количество повторяющихся записей в данной таблице. Какой инструмент лучше всего использовать.

Я пытался использовать следующее analyze table tablename compute statistics, но это дает мне ошибку в таблице.

Обратите внимание, что я новичок в разработке баз данных Oracle

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

При условии дублирования записей, как в записях, имеющих одинаковые данные для всех столбцов, может быть полезен следующий запрос.

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

В приведенном выше запросе column1, column2, .. columnn - это n столбцов (все столбцы) в таблице. В основном вы должны сгруппировать по всем столбцам, и, поскольку вам нужны только те записи, которые имеют дубликаты, у вас есть условие count (1)> 1

0 голосов
/ 14 марта 2019

Добро пожаловать в мир Oracle.

Заявление, которое вы использовали analyze table tablename compute statistics, вам не поможет. Эта команда используется для вычисления внутренней статистики БД Oracle, которая используется оптимизатором запросов, поэтому Oracle может найти наилучший способ запроса данных (для получения дополнительной информации см. Оптимизатор на основе затрат ). Также эта команда уже устарела, и вместо нее следует использовать dbms_stats Анализ таблиц, индексов и кластеров

Теперь давайте перейдем к вашей проблеме. Это может быть решено с помощью пункта в вашем выборе. Смотрите пример ниже:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...