Дублирующиеся записи

При выполнении задачи – с мигрировать данные по адресам для контрактов, необходимо произвести проверку на наличие дублированных записей. Известно, что у одного контракта может быть только один адрес.

В миграционную таблицу MIGR_ADDRESS выгружены данные

CREATE TABLE MIGR_ADDRESS 
(ID_CONTRACT NUMBER(10),
	V_ADDRESS VARCHAR2(256)
) TABLESPACE MIRAVILD_DATA;
 
COMMENT ON TABLE MIGR_ADDRESS  IS 'Миграция';
COMMENT ON COLUMN MIGR_ADDRESS.ID_CONTRACT IS 'Код контракта';
COMMENT ON COLUMN MIGR_ADDRESS.V_ADDRESS IS 'Адрес';
/

Как проверить, есть ли в таблице задублированные строки (к одному контракту привязано несколько адресов) и вывести их в порядке убывания количества дублей? Напишите SQL-запрос.

SELECT ma.id_contract, COUNT(*) AS cnt
  FROM migr_address ma
 GROUP BY ma.id_contract
HAVING COUNT(*) > 1
 ORDER BY cnt DESC;

Тестовые данные:

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (1, 'Адрес 1');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (2, 'Адрес 2');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (2, 'Адрес 3');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (3, 'Адрес 4');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (3, 'Адрес 5');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (3, 'Адрес 6');

INSERT INTO migr_address ma
  (ma.id_contract, ma.v_address)
VALUES
  (2, 'Адрес 7');

COMMIT WORK;
/

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags: ,

Leave a Reply

You must be logged in to post a comment.