Имея таблицу равенства элементов, рассчитайте количество «уникальных» элементов - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть две таблицы: таблица идентификаторов продукта:

таблица p_test:

id:

1

2

3

4

и таблица всех возможных комбинаций продукта, проверенного на равенство с любым другим продуктом (пустьНе скажу, что я тестирую их фотографии, и если они равны - я предполагаю, что они одного и того же продукта): таблица p_match_test:

p_id_1, p_id_2, is_same

1       2       0

1       3       0

1       4       1

2       3       1

2       4       0

3       4       0

, как вы можете видеть в этом примере, всего 4 продукта.Продукт 1 был проверен на равенство с продуктом 4, и они были найдены «одинаковыми», то же самое относится и к продуктам 2 и 3. Это означает, что существует только два «уникальных» продукта (2 уникальных изображения для 4 продуктов).

Чего я хочу добиться, так это иметь количество уникальных картинок в любой группе продуктов, поэтому результат будет:

products_count unique_products_count
4              2

Я пробовал этот запрос:

select count(p.id)                                                                                                            as products_count,
       sum(if(not exists(select * from p_match_test t where (p.id = t.p_id_1 or p.id = t.p_id_2) and t.is_same = 1), 1, 0)) as unique_products_count
from p_test p

, но этоучитывает только продукты, которые имеют нет дубликатов вместо подсчета "уникальных" изображений.Как мне достичь своей цели?

...