Как удалить 90% записей из каждой группы таблицы (postgres) - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть таблица с названием «sales» в postgres, в которой есть столбец «region».Я пытаюсь найти способ удалить 90% записей из каждого «региона» одной и той же таблицы.

Я использую запрос ниже.Но то же самое не работает в postgres, а также в таблице нет столбца первичного / уникального ключа

delete from table
 ( select row_number() over (partition by region) as PAR 
   from sales
 )b  
where PAR >= 
 ( select S*0.1 as ninety
   from 
    ( select region, count(*) as S 
      from sales 
      group by region
    )a
and b.region = a.region

. Может кто-нибудь предложить лучшее решение для этого.

1 Ответ

0 голосов
/ 09 ноября 2018

Если у вас есть уникальный идентификатор в таблице, вы можете сделать:

delete
    from t
    using (select t.*,
                  row_number() over (partition by region order by region) as seqnum,  -- I always include order by
                  count(*) over (partition by region) as cnt
           from t
          ) tt
    where t.id = tt.id and
          tt.seqnum < 0.9 * cnt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...