Например есть таблица следюущего вида :
ИД1 ИД2 ДАННЫЕ
1 1 1
1 1 2
1 1 4
1 2 2
1 2 1
1 2 2
1 2 3
3 1 1
3 1 5
3 1 2
3 1 4
3 1 1
Ключом является пара колонок ИД1 и ИД2, нужно найти пересечения множеств значений в рамках одного уникального значения ключа
То есть из таблицы получается три множества
a) 1,2,4 ( ИД1 = 1, ИД2 = 1 )
б) 2,1,2,3 ( ИД1 = 1, ИД2 = 2 )
в) 1,5,2,4,1 ( ИД1 = 3, ИД2 = 1 )
Нужно их сравнить и вычислить пересечение, получим 3 множества, из них 2 одинаковы
1) а П б — 2,1
2) а П в — 1,2,4
3) б П в — 2,1
И далее необходимо сгрупирровать и посчитать одинаковые множества , т.е. в нашем случае результирующей таблицей будет
ИД ЭЛЕМЕНТ КОЛВО
1 2 2
1 1 2
2 1 1
2 2 1
2 4 1
Можно ли этот алгоритм реализовать в виде SQL запроса ?
Вот с этого момента не понятно:
А>
А>И далее необходимо сгрупирровать и посчитать одинаковые множества , т.е. в нашем случае результирующей таблицей будет
А>А>ИД ЭЛЕМЕНТ КОЛВО
А>1 2 2
А>1 1 2
А>2 1 1
А>2 2 1
А>2 4 1
А>
То есть более наглядно опишите как получается результирующая таблица и что есть ее поля
Здравствуйте, naf_2000, Вы писали:
_>Вот с этого момента не понятно:
А>>
А>>И далее необходимо сгрупирровать и посчитать одинаковые множества , т.е. в нашем случае результирующей таблицей будет
А>>А>>ИД ЭЛЕМЕНТ КОЛВО
А>>1 2 2
А>>1 1 2
А>>2 1 1
А>>2 2 1
А>>2 4 1
А>>
_>То есть более наглядно опишите как получается результирующая таблица и что есть ее поля
Результирующая таблица это представление полученных множеств из первого поста, цитирую :
1) а П б — 2,1
2) а П в — 1,2,4
3) б П в — 2,1
Видим что два одинаковых множества 2,1 — их считаем за одно множество, но в колве 2 шт.
Получаем в результате 2 множества
1. 2,1 ( 2шт )
2. 1,2,4 ( 1 шт )
Теперь представляем это в виде таблицы, где ИД — номер множества , ЭЛЕМЕНТ — значение множества а КОЛВО — количество множеств. Получим результирующую таблицу
ИД ЭЛЕМЕНТ КОЛВО
1 2 2
1 1 2
2 1 1
2 2 1
2 4 1
Да, не все так просто
Пока заткунулся на подзадаче к вашей задаче:
Есть таблица из двух полей K,V
Пара (K,V) уникальна в каждой записи
Набором назовем подмножество всех записей таблицы, имеющих одинаковое значение K.
Два набора равны, если все значения V первого набора содержатся во втором и наоборот.
Семейства наборов — множества всех равных наборов.
Например, для таблицы
K V
1 1
1 2
2 1
2 2
2 3
3 1
3 2
имеется два семейства наборов:
1. состоящее из наборов: (1,1),(1,2) и (3,1),(3,2)
2. из набора (2,1),(2,2),(2,3)
Требуется написать запрос, выдающий выборку из двух полей:
1. различные значения V в каждом семействе
2. количество наборов в семействе
Для данной таблицы:
1 2
2 2
1 1
2 1
3 1