Я работаю над каталогом продуктов (электронной коммерцией), который хранится в базе данных PostgreSQL.У меня в настоящее время есть дубликаты.Я хотел бы удалить эти дублированные продукты, оставив только самый дешевый.
Поля в базе данных, которые важны:
ID [PK] SKU EAN Price ....
1 SKU1 123 45.0 ....
2 SKU2 456 36.0 ....
3 SKU3 123 40.0 ....
4 SKU4 789 58.0 ....
5 SKU5 123 38.0 ....
...
У меня есть СЕРИЙНЫЙ ПЕРВИЧНЫЙ КЛЮЧ на ИД поля.У меня есть SKU NOT NULL, код NOT NULL EAN-13 и цена NOT NULL для каждого продукта.
Мы видим, что EAN "123" дублируется несколько раз.Я хотел бы найти запрос SQL, который удаляет все дубликаты (все строки), оставляя только ОДИН, который будет иметь самую низкую цену.
У нас будет:
ID [PK] SKU EAN Price ....
2 SKU2 456 36.0 ....
4 SKU4 789 58.0 ....
5 SKU5 123 38.0 ....
...
Длязнать: количество дубликатов может быть переменным.Вот пример с 3 продуктами с одинаковым EAN, но у нас может быть 2, 4, 8 или 587 ...
До сих пор мне удавалось удалить дубликаты с самым низким или самым большим идентификатором втолько 2 дубликата, но это не то, что я пытаюсь найти ...
FROM
(SELECT Price,
MIN(Price) OVER( PARTITION BY ean ORDER BY Price DESC ) AS row_num FROM TABLE ) t
WHERE t.row_num > 1 );