Как получить все строки, в которых повторяется только часть строки? - PullRequest
0 голосов
/ 08 мая 2020

Я работаю в SQL (PostgreSQL) с набором данных, где каждая строка представляет собой продукт, проданный компанией, а каждый столбец содержит некоторую информацию о продукте, такую ​​как цена, размер и т. Д. c. Проблема здесь в том, что у меня есть несколько типов продуктов: (i) продукты, которые продаются только за пределами моего штата; (ii) товары, которые продаются только внутри государства; (iii) товары, которые могут продаваться как внутри государства, так и за его пределами; (iv) продукты, которые не указаны. Чтобы указать, где можно продавать товар, есть дополнительные строки. Мы используем «-IN», если мы продаем внутри штата, и «-OUT», если мы продаем за пределами штата. Помимо этой проблемы, я не могу использовать только split_part () , потому что их может быть больше одного '-' Другими словами, у меня есть что-то вроде этого:

product_name        units        price
water-out           5            50
water-out           2            20
water-in            3            21
apple-red-in        7            7
ice-out             4            2
wood-out            12           120
leather             17           6
wood-in             1            10
tuna                5            25
it-br-in            1            2
it-br-out           5            25

Я хочу фильтровать только те продукты, которые продаются как внутри государства, так и за его пределами. Продукты, которые у нас есть, могут иметь в названии "-в" и "-выход". Я хочу получить такой результат:

product_name        units        price
water-out           5            50
water-out           2            20
water-in            3            21
wood-out            12           120
wood-in             1            10
it-br-in            1            2
it-br-out           5            25

Как мне это сделать?

1 Ответ

1 голос
/ 08 мая 2020

Это ответ на исходную версию вопроса.

Предполагая, что в названии продукта нет дефисов, а единственными суффиксами являются «-in» и «-out», тогда split_part() может сделать следующее:

select t.*
from t
where exists (select 1
              from t t2
              where split_part(t2.name, '-', 1) = split_part(t.name, '-', 1) and
                    t2.name <> t.name
             )

Здесь - скрипт db <>.

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