Удаление дубликатов из таблицы с использованием SQL - PullRequest
0 голосов
/ 11 октября 2019

Я очень новичок в кодировании и все еще думаю о некоторых понятиях. Спасибо, если кто-то может помочь мне удалить дубликаты из таблицы ниже;

Предположим, что имя таблицы "t".

Row#  col1  col2  col3        col4       col5  col6
1     101   AR12  -           -          -     -
2     101   AR12  faultyPCBA  supplier   1     0.002%
3     327   AR12  -           -          -     -
4     327   AR09  faulty      personnel  5     0.2%
5     327   AR09  faulty      personnel  5     0.2%
6     327   AR09  faulty      personnel  5     0.2%

Дубликаты в моей таблице определены, если комбинацияиз col1 и col2 являются уникальными. Однако, если в col3 / 4/5/6 есть значение, я бы предпочел, чтобы оно было показано, а не пустым, поэтому окончательный вывод таблицы должен выглядеть так:

Row#  col1  col2  col3        col4       col5  col6
1     101   AR12  faultyPCBA  supplier   1     0.002%
2     327   AR12  -           -          -     -
3     327   AR09  faulty      personnel  5     0.2%

Поскольку я довольно новк кодированию, спасибо, если вы могли бы объяснить, что код делает тоже!

заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 11 октября 2019

Я думаю, что аналитическая функция будет полезна здесь.

select * from
(select t.*, row_number() over (partition by col1, col2 order by col3, col4, col5, col6) as rn
  from t)
where rn = 1

Ура !!

0 голосов
/ 11 октября 2019

Я думаю, что вы ищете ключевое слово DISTINCT ...

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

Подробнее о DISTINCT можно прочитать здесь

DISTINCT только для выбора отдельных строк или, по существу, не дублирующих строк. Так что если у вас есть что-то там более одного раза, оно выбирается только один раз.

SELECT DISTINCT * FROM tbl

Вы можете увидеть пример DISTINCT с этими данными здесь, на SQL FIDDLE.

0 голосов
/ 11 октября 2019

вы можете использовать row_number(), чтобы получить хотя бы 1 для каждого раздела

select * from
(select *, row_number() over (partition by col1, col2, col3, col4, col5 order by col6) as rn
  from t) t1
where t1.rn = 1
0 голосов
/ 11 октября 2019

Вы можете использовать select distinct:

select distinct col1, col2, col3, col4, col5
from t;

Или вы можете захотеть агрегировать:

select col1, col2, max(col3), max(col4), max(col5)
from t
group by col1, col2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...