удалить повторяющиеся строки postgresql - PullRequest
0 голосов
/ 21 июня 2019

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

Проблема в том, что при выполнении кода все повторяющиеся строки удаляются, и никто не сохраняется. Почему так?


SELECT name from ( select name, ROW_NUMBER() OVER(
PARTITION_BY(name) ORDER BY sum DESC) AS rn FROM table ) t
WHERE t.rn > 1

дает мне 1400 строк, но

DELETE FROM table WHERE name IN 
(select company_name from ( select company_name, row_number() over (
partition by(company_name) order by sum_scoring desc) as rn from table ) t
where t.rn > 1)

удаляет 2500 строк (я хочу сохранить 1100 строк)

1 Ответ

0 голосов
/ 21 июня 2019

Как упоминалось в zerkms, вы недостаточно дифференцируете записи.
Вы просто удаляете все записи с дублированными именами, хотите удалить все, кроме одной.
Для этого требуется первичный ключ или другой уникальный столбец.
Я бы рекомендовал использовать rowid (ctid в postgres AFAIK)

DELETE FROM table 
WHERE ctid IN 
(
  select row_id_int
  from 
  ( 
    select company_name ctid as row_id_int, row_number() over ( partition by(company_name) order by 
      sum_scoring desc) as rn 
    from table
  ) t
  where t.rn > 1
)

Ресурсы:
ROWID эквивалент в POSTGRES
POSTGRES Документация, системные столбцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...